Android 无法通过 AndroidManifest 实例化(非静态)内部类.xml(BroadcastReceiver 上的 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
{
...
}
}