1

App1 と App2 の 2 つのアプリがあります。

App1 では、マニフェスト ファイルに BroadcastReceiverIncoming が次のように定義されています。

<receiver android:name="packagename.BroadcastReceiverIncoming"
          android:enabled="true"
          android:exported="true">
    <intent-filter>
        <action android:name="packagename.BroadcastReceiverIncoming" />
    </intent-filter>
 </receiver>

BroadcastReceiverIncoming は App1 で定義されています。

App2 では、これを呼び出してブロードキャスト レシーバーを呼び出していますが、何とか機能していますか?

Intent intent = new Intent();
intent.setClassName("packageName", "packagename.BroadcastReceiverIncoming");
intent.setAction("packagename.BroadcastReceiverIncoming");
appContext.sendBroadcast(intent);

2 行目をコメント化/コメント化解除しても、BroadcastReceiverIncoming は呼び出されません。

BroadcastReceiverIncomingを呼び出すと、adbを介しadb shell am broadcast -n packageName/packagename.BroadcastReceiverIncoming てApp1で正しく呼び出されます。

4

1 に答える 1

2

私はこれを以下のように動作させています:

    myServiceReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context ctx, Intent data) {
            if (data.getAction().equals(POLayer.SVC_INTENT)) {
                final String alias = data.getStringExtra("alias");
                final String command = data.getStringExtra("action");
                if (command.equals("dosomething")) {
                    new DoSomethingTask().execute( alias );
                }
                             }
                     }
             };

  ....

  onCreate:
    final IntentFilter filter = new IntentFilter(POLayer.SVC_INTENT);
    filter.addAction(POLayer.ANOTHER_INTENT);
    this.registerReceiver(this.myServiceReceiver, filter);

送信者で:

                Intent i = new Intent();
                i.setAction( SVC_INTENT );
                i.putExtra( "alias", theAlias );
                i.putExtra( "action", "dosomething" );
                this.sendBroadcast( i );

唯一の違いは、パッケージ/コンポーネント名に依存しているのではなく、独自の ACTION を定義していることです。また、すべての名前で大文字と小文字が区別されるため、packageName と packagename を確認することをお勧めします。

于 2012-12-10T14:52:58.337 に答える