(非静的)内部クラスは、 AndroidManifest.xml ( BroadcastReceiver に関する Android 開発者向けドキュメント)を介して Android によってインスタンス化することはできません。
このクラスのインスタンスを Context.registerReceiver() で動的に登録するか、AndroidManifest.xml の タグを介して静的に実装を公開できます。
したがって、受信者を動的に登録できます。私のアプリケーションでは、Google の Cloud to Device Messaging (C2DM) を使用するために同じことをしたかったのですが、元の AndroidManifest.xml には以下が含まれていました。
<application...>
<receiver android:name=".MyC2dmReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="com.example.myapp" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="com.example.myapp" />
</intent-filter>
</receiver>
</application>
そのレシーバーセクションを削除し、次のようにレシーバーを動的に登録しました。
public class AndroidService extends IntentService
{
...
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
IntentFilter filter = new IntentFilter();
filter.addAction("com.google.android.c2dm.intent.RECEIVE");
filter.addAction("com.google.android.c2dm.intent.REGISTRATION");
filter.addCategory("com.example.myapp");
this.registerReceiver(new MyC2dmReceiver(), filter, "com.google.android.c2dm.permission.SEND", null);
return super.onStartCommand(intent,flags,startId);
}
public class MyC2dmReceiver extends BroadcastReceiver
{
...
}
}