web-dev-qa-db-ja.com

ブロードキャストレシーバーをマニフェストファイルの内部クラスとして定義することはできますか?

メインアクティビティの内部クラスとしてブロードキャストレシーバーを作成したい。 Androidが見つからないため、マニフェストxmlファイルでブロードキャストレシーバーを定義するのに問題があります。

コード:

public class MyActivity extends Activity{
    ...

    public class Receiver extends BroadcastReceiver{

        @Override
        public void onReceive(Context context, Intent intent) {
            ....
        }

    }

    ...
}

マニフェスト:

<receiver Android:name=".org.danizmax.myapp.MyActivity$Receiver" Android:enabled="true">
            <intent-filter>
                <action Android:name="org.danizmax.myapp.BROADCAST_INITIAL_DATA"></action>
            </intent-filter>
</receiver>

私が試した:

  • .org.danizmax.myapp.MyActivity $ Receiver
  • org.danizmax.myapp.MyActivity $ Receiver
  • .MyActivity $ Receiver
  • .Receiver

他の人も同様の問題を抱えているのを見ましたが、答えは見つかりませんでした。

それは可能ですか?そうでない場合、放送受信機を使用するより良い方法は何ですか?

ありがとう!

41
danizmax

はい、可能です。

レシーバーのAndroid:name属性は.path.to.class.MyClass$MyInnerClassのようになります。

72
Cheryl Simon

non-static内部クラスでこれを行う場合は、AndroidManifest.xmlを使用して行うことはできません。ただし、BroadcastReceiverを動的に登録することはできます。 Receiver as inner class in Android

12
Bert Regelink