Как запустить сервисное приложение для Android

Я создаю приложение, единственным компонентом которого являетсяservice который продолжает работать в фоновом режиме (в основном прокси-сервер), но я не могу найти способ, как запустить этот сервис. Приложение не может иметь пользовательского интерфейса или взаимодействия с пользователем, поэтому я не использую Activity.
Broadcast receiver могу слушать трансляцию BOOT, но как мне запустить службу в первый раз, когда она установлена, и как я могу сохранить ее работоспособной? или есть ли трансляция, которую я могу слушать после установки приложения, например может быть TIME_TICK, но это должно быть зарегистрировано по активности, я думаю.

 phreed21 мар. 2011 г., 13:27
Я сам не пробовал, но можно ли запустить службу из объекта Application?
 Android22 нояб. 2011 г., 07:48
Я думаю, что это работаетandroid-codes-examples.blogspot.com/2011/11/...

Ответы на вопрос(3)

Решение Вопроса

сейчас нет надежного способа получения события трансляции после того, как ваше приложение было установлено,ACTION_PACKAGE_ADDED Намерение не распространяется на недавно установленный пакет.

Вы должны будете иметь класс приемника вещания, а также свои услуги, чтобы получитьACTION_BOOT_COMPLETED мероприятие. Я также рекомендовал бы добавитьACTION_USER_PRESENT для того, чтобы быть пойманным этим широковещательным приемником, для этого требуется Android 1.5 (minSDK = 3), он будет вызывать ваш широковещательный приемник всякий раз, когда пользователь разблокирует свой телефон. Последнее, что вы можете сделать, чтобы сохранить работоспособность вашей службы без автоматического отключения, это позвонитьService.setForeground () в вашем сервисе onCreate, чтобы сообщить Android, что ваш сервис не должен быть остановлен, он был добавлен в основном для сервисов типа mp3-плеера, которые должны работать, но могут использоваться любым сервисом.

Убедитесь, что вы добавили правильные разрешения для событий boot_complete и user_present в манифесте.

Вот простой класс, который вы можете использовать в качестве приемника вещания для событий.

package com.snctln.util.WeatherStatus;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class WeatherStatusServiceReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if(intent.getAction() != null)
        {
            if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
                intent.getAction().equals(Intent.ACTION_USER_PRESENT))
            {
                context.startService(new Intent(context, WeatherStatusService.class));
            }
        }
    }
};

Удачи.

 defrex24 нояб. 2010 г., 16:51
ACTION_USER_PRESENT - это отличный совет. Я боролся с тем, чтобы сохранить свою службу целую вечность, и это просто решило ее.
 jpalm21 июн. 2013 г., 18:12
@ArchimedesTrajano Я знаю, что этот вопрос старый, но это был первый результат в Google. Есть некоторая документацияВот и хорошее объяснениеВот.
 ubuntudroid12 янв. 2012 г., 16:08
Выяснилось, что начиная с версии 3.0 и выше нужно хотя бы раз запустить приложение, чтобы получить намерение - странно, но у меня работает. Это означает, что нужно создать небольшое действие (то есть с вводным материалом), которое запускается после установки. После этого вы получите намерения правильно.
 ubuntudroid11 янв. 2012 г., 15:58
Что ж, похоже, в Android 4.0.x это больше не работает ...
 Jarett Millard25 дек. 2009 г., 00:45
Хороший совет. Одна вещь о Service.setForeground (): он больше не работает в Android 2.0+. Все «долгоживущие» службы теперь должны иметь постоянное уведомление в области уведомлений во время их работы. Пример здесь:developer.android.com/resources/samples/ApiDemos/src/com/...

START_STICKY вService.onStartCommand

Android перезапустит ваш сервис

 cow10 сент. 2010 г., 18:10
START_STICKY действует только для Android 2.0+
 diyoda_07 янв. 2016 г., 01:26
но служба должна запускаться хотя бы один раз, чтобы получить правильную непрерывность?

http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html

Эта простая небольшая демонстрация демонстрирует решение, играя немного в пинг-понг междуBroadcatReceiver иService, Получатель зарегистрирован для запуска во время загрузки, зарегистрировавшись в Манифесте для полученияACTION_BOOT_COMPLETED, Он просто запускает службу при полученииACTION_BOOT_COMPLETED,Service в свою очередь регистрируетBroadcastReceiver тогда дляACTION_TIME_TICK.

Логика приложения будет реализована вBroadcastReceiver.

Ваш ответ на вопрос