Запустите приложение Android без активности - PullRequest
24 голосов
/ 14 декабря 2011

У меня есть приложение, которое предназначено для запуска только в качестве службы (без интерфейса, просто в фоновом режиме). У меня нет активности, упомянутой в моем 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 или выше. Источник

Ответы [ 3 ]

33 голосов
/ 14 декабря 2011

Помимо двух параметров, упомянутых EboMike: вы всегда можете отправить BOOT_COMPLETED трансляцию через командную строку вместо перезагрузки телефона.

Использовать

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

Это приведет кв ситуации, как после фактической перезагрузки, а также будет запускать приемники загрузки любых сторонних приложений.После того, как вы наберете его один раз в терминале, вы обычно можете повторить его, просто нажав клавишу со стрелкой вверх, после чего вернитесь в большинстве операционных систем.Или вы можете включить его в скрипт, который запускается после переустановки приложения.


Если вы хотите ограничить вещание только вашим приложением, вы также можете указать компонент:

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName

Это отправит перезагрузку только вашему получателю.Все остальные приложения не называются.

2 голосов
/ 14 декабря 2011

Вариант 1: добавьте фиктивное действие, которое запустит ваш сервис. Удалите его перед отправкой.

Вариант 2. Создайте второе тестовое приложение, которое запускает ваш сервис.

1 голос
/ 12 марта 2013

Запуск службы с использованием широковещательного приемника через любое намерение, например

android.intent.action.BOOT_COMPLETED

невозможно выше Android 3.1, пока пользователь не использует ваше приложение , и, таким образом, для использования вашего приложения должна быть одна активность без пользовательского интерфейса (которая может вызывать финиш в oncreate ()).

См. Доказательство здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...