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>
44
demandé sur altendky 2011-03-02 20:49:05

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

77
répondu lapis 2012-04-17 17:28:33

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.

59
répondu Viet 2012-03-29 10:09:40

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
9
répondu ejboy 2015-05-23 00:13:22

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

2
répondu foo 2017-11-10 22:12:21