我可以使用<receiver>我的清单中的成功注册我的Android应用程序与C2DM .但是,如果我<receiver>从清单中删除并使用上下文的registerReceiver方法注册我的接收器,则会收到SERVICE_NOT_AVAILABLE错误响应.我已经在模拟器和真实设备中重现了这种行为.
是否可以动态注册C2DM接收器?
这是我删除的清单的片段:
<receiver android:name=".service.C2DM.C2DMReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="mytestapp" />
</intent-filter>
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="mytestapp" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
以下是代码:
public class C2DMReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String registration = intent.getStringExtra("registration_id");
if (intent.getStringExtra("error") != null) {
//TODO: Registration failed, should try again later.
Log.e("MyTestAppC2DM", "C2DM Error = " + intent.getStringExtra("error"));
} else if (intent.getStringExtra("unregistered") != null) {
Log.d("MyTestAppC2DM", "C2DM Unregistered");
} else …Run Code Online (Sandbox Code Playgroud)