web-dev-qa-db-ja.com

Android adb Shell am broadcast:不正なコンポーネント名

再起動(またはadb Shell am)およびコンポーネントの参照方法がわかりません。繰り返しになりますが、コンポーネントが何を意味するのかさえ理解できないかもしれません。以下に、まず機能しないコマンドの例をいくつか示し、次にマニフェストを示します。 StartupReceiverは、「電話」の起動時に正常に呼び出されることに注意してください。完全に再起動せずに再トリガーしたいだけです。

失敗した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

マニフェスト:

<?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
altendky

次のように、クラス名の前にパッケージ名を指定する必要があります(その後、パッケージなしで記述できます)。

./adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -c Android.intent.category.HOME -n net.fstab.checkit_Android/.StartupReceiver

実際には、パッケージ名の後にスラッシュを追加するだけです。

あなたは私が始めるのを助けました、私はあなたが終わるのを助けました:)

79
lapis

ブロードキャストでは、レシーバーを指定する必要はありません。この場合、ただストロークしてください

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED

この助けを願っています。

60
Viet

BOOT_COMPLETEDが2回受信されると、一部のアプリが誤動作する場合があります。代わりに、アプリのみにブロードキャストを制限します。

adb Shell am broadcast -a Android.intent.action.BOOT_COMPLETED -p com.example.package
10
ejboy

試して

adb Shell am broadcast \ -a Android.intent.action.BOOT_COMPLETED \ -n net.fstab.checkit_Android/.StartupReceiver

-n net.fstab.checkit_Android/.StartupReceiver)に注意して、特定のレシーバーを目指してください。

また、アプリが特定のブロードキャストインテントを受信する許可を使用していることを確認してください-この場合、

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

2
foo