Android-приложение как сервис без активности

Я делаю набор приложений, и у меня почти одинаковая фоновая служба для всех из них.

Я пытаюсь сделать приложение, в котором есть только этот Service. поэтому я не повторяю это во всех них, но дело в том, что не нужно никаких Activity. потому что для этого не нужен пользовательский интерфейс, и поэтому пользователь не может закрыть его, кроме как если он остановит Service.

Я попытался удалить Activity, но тогда приложение не запускается или не запускается. Мой вопрос: могу ли я сделать приложение, точно такое же, как Google Play Services, чтобы другие приложения могли использовать его Service.

Если да, то фрагмент или образец будут очень кстати.


person iLyas    schedule 19.06.2014    source источник
comment
Создайте свой Service в проекте библиотеки. Невозможно использовать Service как отдельное приложение. Пользователь должен запустить его вручную через файл Activity.   -  person Squonk    schedule 19.06.2014
comment
Вы не можете разработать какое-либо приложение только с сервисом.   -  person Bhavesh Jethani    schedule 19.06.2014


Ответы (1)


Конечно! Нет причин, по которым вы не можете иметь приложение только со службой. ... и нет необходимости входить в AIDL, если вы этого не хотите.

Проблема в том, как заставить приложение работать. Когда вы создаете приложение с действием, вы добавляете фильтр Intent в манифест, который позволяет запускать действие из панели запуска. Если активности нет, вам придется найти другой способ начать ее.

Однако это легко сделать. Просто запустите намерение из одной из ваших других программ, например:

startService(new Intent("my.service.intent"));

... где служба зарегистрирована в вашем манифесте, например:

        <service android:name=".SomeService" >
          <intent-filter>
            <action android:name="my.service.intent"/>
          </intent-filter>

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

Конечно, startService и broadcastIntent немного неуклюжи, если вам действительно нужен сложный API между приложениями и вашим сервисом. Если вам нужно что-то более богатое, вам понравится изучить AIDL и связанную службу.

Отредактировано для добавления Intent Filter

person G. Blake Meike    schedule 19.06.2014
comment
Спасибо за ваш ответ, это было очень полезно. На самом деле мне было интересно, как вызвать службу. Я добавляю BroadcastReceiver в службу (приложение) и делаю так, чтобы она запускалась при загрузке, это должно разрешить событие пожара для запуска службы. - person iLyas; 20.06.2014
comment
@ilyas Да, это должно сработать. Помните, однако, что только потому, что вы запускаете его при загрузке, не означает, что он продолжит работать. Android, в конце концов, убьет его. Кроме того, вы можете свести к минимуму использование батареи, запуская службу только тогда, когда это действительно необходимо... - person G. Blake Meike; 20.06.2014
comment
как я могу сделать это в Android Studio? Я не разрешаю создавать приложение без активности... - person Libathos; 08.12.2016
comment
Я не понимаю, как это решает проблему, вы все еще запускаете фоновую службу из действия, просто из действия в этом приложении. - person Matt; 25.04.2018
comment
@MattD Почему вы думаете, что это должно быть в одном приложении? - person G. Blake Meike; 25.04.2018
comment
Извините, я имею в виду, просто не из-за активности в этом приложении. Я предполагаю, что OP, как и я, искал способ запустить службу при запуске без того, чтобы пользователь вообще открывал какое-либо приложение. Я нашел способ, используя широковещательные приемники. - person Matt; 25.04.2018
comment
Что заставляет вас думать, что это должно быть Activity? ... и, конечно же, самый распространенный способ запустить приложение без взаимодействия с пользователем - это перехватить BOOT_COMPLETE с помощью Receiver. Получатель запускает службу... - person G. Blake Meike; 25.04.2018