Android adb shell am diffusion: mauvais nom du composant
J'essaie d '"émuler" un redémarrage (ou toute autre chose avec le adb shell am
) et je suis incapable de comprendre comment référencer mon composant. Là encore, peut-être que je ne comprends même pas ce que l'on entend par un 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 viens de re-déclencher sans redémarrage.
Échec des commandes ADB:
$ ./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>
4 réponses
Vous devez spécifier le nom du paquet avant le nom de la classe (alors vous pouvez l'écrire sans le paquet) comme ceci:
./adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -c android.intent.category.HOME -n net.fstab.checkit_android/.StartupReceiver
Pratiquement, il s'avère que vous avez juste à ajouter une barre oblique après le nom du paquet.
Vous m'avez aidé à commencer, je vous ai aidé à terminer:)
Diffusion ne nécessite pas spécifier un récepteur. Ce cas, s'il vous plaît juste course
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
Espérons que cette aide.
Certaines applications peuvent mal se comporter si BOOT_COMPLETED est reçu deux fois, au lieu de limiter la diffusion à votre application uniquement:
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -p com.example.package
Essayez
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, ce serait
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />