J'essaie "d'émuler" un redémarrage (ou autre chose avec le adb Shell am
) et je ne sais pas comment référencer mon composant. Là encore, peut-être que je ne comprends même pas ce que l'on entend par composant. Ci-dessous, j'inclus d'abord quelques exemples de commandes qui ne fonctionnent pas, puis mon manifeste. Notez que StartupReceiver est appelé avec succès lorsque le "téléphone" démarre. Je veux juste le relancer sans redémarrage complet.
Commandes ADB ayant échoué:
$ ./adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -c Android.intent.category.HOME -n net.fstab.checkit_Android.StartupReceiver
<help snipped>
Error: Bad component name: net.fstab.checkit_Android.StartupReceiver
$ ./adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -c Android.intent.category.HOME -n .StartupReceiver
<help snipped>
Error: Bad component name: .StartupReceiver
$ ./adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -c Android.intent.category.HOME -n StartupReceiver
<help snipped>
Error: Bad component name: StartupReceiver
Manifeste:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="net.fstab.checkit_Android" Android:installLocation="internalOnly"
Android:versionCode="1" Android:versionName="1.0">
<application Android:icon="@drawable/icon"
Android:label="@string/app_name">
<activity Android:name=".BaseActivity" Android:label="@string/app_name">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity Android:name="BasePreferences" />
<activity Android:name="EditActivity" />
<receiver Android:name="StartupReceiver">
<intent-filter>
<action Android:name="Android.intent.action.BOOT_COMPLETED" />
<category Android:name="Android.intent.category.HOME" />
</intent-filter>
</receiver>
<receiver Android:name="NotificationReceiver">
<intent-filter>
<action Android:name="net.fstab.checkit_Android.NotificationReceiver" />
</intent-filter>
</receiver>
<service Android:name="StartupService">
<intent-filter>
<action Android:name="net.fstab.checkit_Android.StartupService" />
</intent-filter>
</service>
</application>
<uses-sdk Android:minSdkVersion="8" />
<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED" />
</manifest>
Vous devez spécifier le nom du package avant le nom de la classe (vous pouvez alors l'écrire sans le package) comme ceci:
./adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -c Android.intent.category.HOME -n net.fstab.checkit_Android/.StartupReceiver
En pratique, il s'avère que vous n'avez qu'à ajouter une barre oblique après le nom du package.
Tu m'as aidé à commencer, je t'ai aidé à finir :)
La diffusion ne nécessite pas de spécifier de récepteur. Ce cas, s'il vous plaît juste caresser
adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED
J'espère que cette aide.
Certaines applications peuvent se comporter mal si BOOT_COMPLETED est reçu deux fois, au lieu de cela, limiter la diffusion à votre application uniquement:
adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -p com.example.package
Essayer
adb Shell am broadcast \ -a Android.intent.action.BOOT_COMPLETED \ -n net.fstab.checkit_Android/.StartupReceiver
(notez le - n net.fstab.checkit_Android/.StartupReceiver) pour viser un récepteur spécifique.
Assurez-vous également que votre application utilise l'autorisation de recevoir des intentions de diffusion spécifiques - dans ce cas, il serait
<uses-permission Android:name="Android.permission.RECEIVE_BOOT_COMPLETED" />