web-dev-qa-db-fra.com

Lancez l'application Android sans activité principale et démarrez le service au lancement de l'application

J'ai le scénario suivant dans mon application. Il n'y a pas d'interface utilisateur dans ma candidature. à la place, il existe un service qui démarre au démarrage et continue à fonctionner.

Comment puis-je configurer mon fichier manifeste sans activité principale? Puis-je lancer mon application sans aucune activité? Et au lancement de mon application, mon service devrait commencer. Est-ce possible?

Je ne veux pas faire une activité translucide pour démarrer le service.

78
Meher

Vous avez dit que vous ne souhaitiez pas utiliser une activité translucide, mais cela semble être le meilleur moyen de le faire:

  1. Dans votre manifeste, définissez le thème d'activité sur Theme.Translucent.NoTitleBar.
  2. Ne vous embêtez pas avec une mise en page pour votre activité et n'appelez pas setContentView().
  3. Dans la onCreate() de votre activité, démarrez votre service avec startService().
  4. Quittez l'activité avec finish() une fois que vous avez démarré le service.

En d'autres termes, votre activité ne doit pas nécessairement être visible; vous pouvez simplement vous assurer que votre service est en cours d'exécution, puis quitter, ce qui ressemble à ce que vous voulez.

Je recommanderais vivement de montrer au moins un notification Toast indiquant à l'utilisateur que vous lancez le service ou qu'il est déjà en cours d'exécution. C'est une très mauvaise expérience utilisateur d'avoir une icône de lanceur qui semble ne rien faire lorsque vous appuyez dessus.

115

Oui, vous pouvez le faire en créant simplement un BroadcastReceiver qui appelle votre Service au démarrage de votre application. Voici une réponse complète donnée par moi.
Android - Démarrer le service au démarrage

Si vous ne voulez pas d'icône/lanceur pour votre application, vous pouvez le faire aussi, mais ne créez aucune activité avec

<intent-filter>
    <action Android:name="Android.intent.action.MAIN" />
    <category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>

Déclarez simplement votre Service comme déclaré normalement.

30
Lalit Poptani

La raison de créer une application sans activité ou service peut être de créer une application de widget qui n'a pas besoin d'être démarrée.
Une fois que vous démarrez un projet, ne créez aucune activité. Après avoir créé le projet, cliquez simplement sur Exécuter. Android le studio dira No default activity found.

Cliquez Edit Configuration et dans la partie Launch Option , configurez la valeur Launch à rien. Puis cliquez sur ok et lancez l'application. Aucune application ne sera affichée dans le menu Applications .

3
Mahdi-Malv

Android Studio version 2.3

Vous pouvez créer un service sans activité principale en suivant quelques étapes simples. Vous pourrez installer cette application via Android Studio et la déboguer comme une application normale.

Tout d’abord, créez un projet dans Android Studio sans activité. Créez ensuite votre classe Service et ajoutez le service à votre AndroidManifest.xml

<application Android:allowBackup="true"
    Android:label="@string/app_name"
    Android:icon="@mipmap/ic_launcher"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme">
    <service Android:name="com.whatever.myservice.MyService">
        <intent-filter>
            <action Android:name="com.whatever.myservice.MyService" />
        </intent-filter>
    </service>
</application>

Maintenant, dans le menu déroulant à côté du bouton "Exécuter" (flèche verte), allez à "modifier les configurations" et dans les "Options de lancement", choisissez "Rien". Cela vous permettra d'installer votre service sans Android Studio se plaindre de ne pas avoir d'activité principale.

Une fois installé, le service ne fonctionnera PAS, mais vous pourrez le démarrer avec cette commande adb Shell ...

am startservice -n com.whatever.myservice/.MyService

Peut vérifier qu'il fonctionne avec ...

ps | grep whatever

Je n'ai pas encore essayé, mais vous pouvez probablement avoir Android Studio automatiquement démarrer le service également. Ceci serait effectué dans le menu "Modifier les configurations".

3
Merc