Запустить приложение для Android без активности
У меня есть приложение, которое предназначено для запуска только как сервис (без интерфейса, просто запускается в фоновом режиме). У меня нет активности, упомянутой в моем AndroidManifest.xml, но поместите приемник для запуска приложения при запуске телефона.
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<service
android:enabled="true"
android:name=".MyAppService">
<intent-filter>
<action
android:name = "me.myapp.MyAppService">
</action>
</intent-filter>
</service>
<receiver
android:enabled="true"
android:name=".BootReceiver">
<intent-filter>
<action android:name = "android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
</application>
Проблема заключается в том, что, когда я разрабатываю (используя Eclipse) приложение, мне нужно часто проверять свои изменения. Когда я запускаю приложение (с подключенным телефоном в режиме отладки), у меня есть сообщение типа
[2011-12-14 00:18:40 - MyApp] Android Launch!
[2011-12-14 00:18:40 - MyApp] adb is running normally.
[2011-12-14 00:18:40 - MyApp] No Launcher activity found!
[2011-12-14 00:18:40 - MyApp] The launch will only sync the application package on the device!
[2011-12-14 00:18:40 - MyApp] Performing sync
Как запустить приложение при запуске, не перезагружая его каждый раз?
Изменить, это невозможно для Android 3.1 и выше. Источник
Ответы
Ответ 1
Помимо двух вариантов, упомянутых EboMike: вы всегда можете отправлять трансляцию BOOT_COMPLETED
через командную строку вместо перезагрузки телефона.
Использование
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
Это приведет к ситуации, например, после фактической перезагрузки, а также вызовет загрузку сторонних приложений. После того, как вы набрали его один раз в терминале, вы обычно можете повторить его, просто нажав клавишу со стрелкой вверх с последующим возвратом в большинстве операционных систем. Или вы можете включить его в script, который запускается после переустановки вашего приложения.
Если вы хотите ограничить трансляцию только вашим приложением, вы также можете указать компонент:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName
Отправляет перезагрузку только для вашего ресивера. Все остальные приложения не вызываются.
Ответ 2
Вариант 1: добавьте фиктивную активность, которая запустит вашу службу. Удалите его перед отправкой.
Вариант 2. Создайте второе тестовое приложение, которое запустит вашу службу.
Ответ 3
Запуск службы, использующей широковещательный приемник через любое намерение, например
android.intent.action.BOOT_COMPLETED
не может быть выше Android 3.1, пока пользователь не использует ваше приложение,
и, следовательно, для использования вашего приложения должен быть один неинтерфейс (который может вызывать финиш в oncreate()).
См. доказательство здесь