2011-12-13 2 views
24

У меня есть приложение, которое предназначено для запуска только как сервис (без интерфейса, просто работайте в фоновом режиме). У меня нет активности, упомянутой в моем AndroidManifest.xml, но поместите приемник для запуска приложения при запуске телефона.Запустить приложение для Android без активности

<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 или выше. Source

ответ

33

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

Использование

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

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


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

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

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

+0

Спасибо, хороший способ пойти. Возможно, я также могу создать свое собственное событие, которое может использовать только мое приложение, чтобы избежать конфликта с другими сторонними приложениями. –

+1

@MartinTrigaux Просто проверил документы и вспомнил, что для этого можно указать компонент. См. Мое редактирование. –

2

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

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

+0

Легкая и работа, благодаря –

+0

Как приложение вести себя во время выполнения? Что сделает приложение запущенным? Запуск после загрузки недостаточно хорош, так как Android может убить процесс. Что будет инициировать это снова? –

1

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

android.intent.action.BOOT_COMPLETED

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

See the proof here

Смежные вопросы