web-dev-qa-db-fra.com

Comment démarrer un service lorsque .apk est installé pour la première fois

Dans mon application, je n'ai aucune partie de l'interface utilisateur. Je dois donc démarrer un service dès que l'application est installée sur le périphérique. J'ai vu de nombreux liens d'où la réponse était que ce n'est pas possible mais je suppose que c'est sûrement possible. Il suffit de jeter un oeil à PlanB Application sur le Android qui remplit mon exigence. Ci-dessous, mon fichier Manifeste où j'ai essayé, mais le service n'a pas été appelé du tout. Faites-moi donc savoir quel est le meilleur moyen de démarrer un service lorsque l’application est installée.

[~ # ~] met à jour [~ # ~]

J'ai aussi essayé d'utiliser Android.intent.action.PACKAGE_ADDED cela fonctionne bien pour détecter le package pour les autres applications mais pas pour lui-même.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.auto.start"
    Android:versionCode="1"
    Android:versionName="1.0" >

    <uses-sdk Android:minSdkVersion="8" />
    <uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED"/>

    <application
        Android:icon="@drawable/ic_launcher" >

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

        <receiver Android:name=".BootUpReceiver">
            <intent-filter>
                <action Android:name="Android.intent.action.BOOT_COMPLETED"/>
                <category Android:name="Android.intent.category.DEFAULT"/>
                <action Android:name="Android.intent.action.PACKAGE_INSTALL" />
                <action Android:name="Android.intent.action.PACKAGE_ADDED" />
                <data Android:scheme="package"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>
67
Lalit Poptani

Heureusement, Plan B ne fonctionne pas sur Android 3.1+, comme testé sur un XOOM et un Galaxy Nexus.

Ce que Plan B exploite, c’est qu’il exploite une faille de sécurité qui pourrait être utilisée par des logiciels malveillants, ce qui explique précisément pourquoi Android l’empêche de se produire plus longtemps.).


MISE À JOUR

Pour clarifier: comme inazaruk a posté et commenté d'autres réponses, toutes les applications, lors de l'installation, sont placées dans un état "arrêté". Il s'agit du même état dans lequel l'application se termine après que l'utilisateur l'ait forcée à arrêter l'application à partir de l'application Paramètres. Dans cet état "arrêté", l'application ne s'exécutera pas pour quelque raison que ce soit, sauf par le lancement manuel d'une activité. Notamment, aucun BroadcastReceviers ne sera appelé, quel que soit l'événement pour lequel ils se sont inscrits, jusqu'à ce que l'utilisateur exécute l'application manuellement.

Ce bloc couvre le scénario d’installation et d’exécution à distance du plan B, dont ils tiraient parti auparavant. Après tout, avec cela, toute personne possédant un compte Google piraté risquerait de voir son appareil infecté, le mains libres pour ainsi dire.

Alors, quand le PO dit:

Je dois démarrer un service dès que Applicaton est installé sur le périphérique.

le PO échouera et devra repenser l'application pour éviter ce "besoin" supposé.

78
CommonsWare

Les applications installées sur la partition/system ne peuvent pas être placées à l'état "arrêté" après l'installation. Si vous avez la racine, vous pouvez le faire,

$ adb root
$ adb remount
$ adb Push your.apk /system/app

Et il peut immédiatement recevoir des intentions de diffusion. Cela ne fournit certainement pas une solution à usage général, mais je voulais le mentionner pour être complet.

EDIT: N'oubliez pas que différentes versions de Android localisent les fichiers APK du système à différents endroits. Par exemple, Android 8 les place sous/system/app //. Shell dans votre appareil et fouillez et suivez le même schéma que celui utilisé pour les autres APK du système.

17
Jeffrey Blattman

Je suis d’accord avec la réponse de CommonsWare à la question: Comment démarrer Android à l’installation . En d’autres termes, vous ne pouvez pas démarrer automatiquement votre service après avoir été installé installée.

Une dernière chose à propos des nouvelles plateformes Android: si vous n’avez pas d’interface utilisateur, vous aurez du mal à démarrer votre service, même si vous utilisez BOOT_COMPLETE intention sur Android 3.1+.

En effet, toutes les applications installées sont à l'état arrêté. Dans cet état, les applications ne recevront AUCUNE notification de diffusion.

Pour activer votre application, une autre application (ou utilisateur) doit démarrer votre service, votre activité ou votre fournisseur de contenu. Le flux de travail habituel se produit lorsque l'utilisateur clique sur l'icône de votre application.

J'ai écrit une explication détaillée à ce sujet dans mon article de blog .

14
inazaruk

Plan B effectue ce lancement en écoutant les événements qui se produisent dans le système. Il utilise un récepteur qui écoute littéralement des centaines d'événements en espérant que certains d'entre eux se déclencheront. Voilà comment vous pouvez le faire. Sinon, il n'y a pas de moyen intégré pour lancer l'application dès son installation.

5
Malcolm

Je ne suis pas sûr de vos contraintes/objectifs, mais si vous pouvez installer une autre application ayant une activité, vous pouvez lui faire envoyer une intention avec le drapeau FLAG_INCLUDE_STOPPED_PACKAGES .

Ceci utilisera votre application pour la résolution de l'intention, même si elle est à l'état arrêté. Si l'action de l'intention correspond à l'un de vos filtres, le paquet sortira également de l'état arrêté.

5
Xiao

Je ne pense pas. Vous pouvez démarrer le service immédiatement après avoir installé votre application sur l'appareil,

L’application doit d’abord être appelée par l’utilisateur via une sorte de Activity. Les seules choses que vous devez enregistrer Broadcast Receiver Avec les intentions appropriées du manifeste, invoquant votre service lorsque quelque chose se passe sur le périphérique mais cela reste à Android version 3.1.

EDIT:

Après Android 3.1 + , vous ne pouvez plus utiliser Broadcast pour démarrer votre application, car toutes les applications restent à l'état inactif après l'achèvement de l'appareil. et pour lancer l’application, l’utilisateur doit l’appeler (en touchant l’icône de l’application).

3
user370305

Le meilleur moyen d’y parvenir (et je parle maintenant de l’intention spécifique du PO, un programme qui s’installe pour récupérer un téléphone volé, et non la question générale) est l’ingénierie sociale, pas l’ingénierie logicielle.

Ainsi, une icône avec un texte comme "Liste de mots de passe" ou "Mes comptes bancaires" apparaissant soudainement sur l'écran d'accueil serait sans aucun doute cliquée. Regardez le succès de toutes sortes d'autres tentatives d'hameçonnage et vous cibleriez ici un voleur déjà motivé à poursuivre une activité néfaste. Laissez le voleur le démarrer pour vous. :)

1
Anders8

Comme indiqué par CommonsWare dans la réponse à cette question (que vous avez tous déjà vu, mais que vous avez choisi d'ignorer), le démarrage d'un service à l'installation n'est pas possible - ce n'est tout simplement pas une chose mise en œuvre dans la plate-forme.

Le démarrer automatiquement au prochain démarrage est cependant possible.

Comme indiqué dans les détails techniques pour PlanB:

Plan B tentera de se lancer dès son téléchargement, mais dans certains cas, vous devrez envoyer un SMS pour le démarrer.

Je suppose que sur un téléphone enraciné, vous pourriez pouvoir démarrer le Service à l'installation, mais rien ne garantit que le téléphone est c'est pourquoi PlanB exigera dans certains cas la réception d'un texte, car il peut être enregistré par le IntentFilter de l'application, puis utilisé pour démarrer le Service.

1
kaspermoerch

il existe une application sur Google Play Android Lost qui appelle le service d'enregistrement des messages Google Push via un SMS entrant sans lancer l'application, même une fois pour la version 3.0+.

1
test