web-dev-qa-db-fra.com

Démarrer l'application Android sans activité

J'ai une application qui vise à fonctionner uniquement en tant que service (pas d'interface, juste en arrière-plan). Je n'ai aucune activité mentionnée dans mon fichier AndroidManifest.xml, mais mets un récepteur pour démarrer l'application au démarrage du téléphone.

<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>

Le problème est que lorsque je développe (avec Eclipse) l’application, je dois souvent tester mes modifications. Lorsque je lance l'application (avec mon téléphone connecté en mode débogage), j'ai un message comme

[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

Comment puis-je démarrer l'application à l'exécution, sans avoir à la redémarrer à chaque fois?


Edit ceci n'est plus possible pour Android 3.1 ou supérieur. La source

24
Martin Trigaux

Outre les deux options mentionnées par EboMike: Vous pouvez toujours envoyer la diffusion BOOT_COMPLETED via la ligne de commande au lieu de redémarrer votre téléphone.

Utilisation

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED

Cela se traduira par une situation semblable à celle qui suit un redémarrage réel et déclenchera également les récepteurs de démarrage d'applications tierces. Après avoir tapé une fois dans un terminal, vous pouvez généralement le répéter en appuyant simplement sur la flèche vers le haut, puis sur Entrée pour la plupart des systèmes d'exploitation. Vous pouvez également l'inclure dans un script déclenché après la réinstallation de votre application. 


Si vous souhaitez limiter la diffusion à votre application uniquement, vous pouvez également spécifier un composant:

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -n your.app.packagename/.YourReceiverClassName

Cela envoie la diffusion de redémarrage uniquement à votre récepteur. Toutes les autres applications ne sont pas appelées.

33
user658042

Option 1: Ajoutez une activité fictive qui démarrera votre service. Retirez-le avant l'expédition.

Option 2: créez une deuxième application de test qui lance votre service.

2
EboMike

Démarrage du service à l'aide du récepteur de radiodiffusion par le biais d'une intention telle que 

Android.intent.action.BOOT_COMPLETED 

est impossible au-dessus d’Android 3.1 tant que l’utilisateur n’utilise pas votre application , . Pour utiliser votre application, il doit donc exister une seule activité autre que l’UI (pouvant appeler finish dans oncreate ()).

Voir la preuve ici

1
shridutt kothari