Подтвердить что ты не робот

Запустить приложение для 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 и выше. Источник

4b9b3361

Ответ 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()).

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