(не статичный) внутренний класс не может быть создан Android с помощью AndroidManifest.xml ( Документация для разработчиков Android на BroadcastReceiver ):
Вы можете динамически зарегистрировать экземпляр этого класса с помощью
Context.registerReceiver () или статически опубликовать реализацию
через тег в вашем AndroidManifest.xml.
Таким образом, вы можете динамически зарегистрировать получателя. В моем приложении я хотел сделать то же самое для использования Google Cloud 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
{
...
}
}