我正在现有的客户端/服务器Android应用程序上设置C2DM。该应用程序已经有一组已建立的类,用于与服务器通信,记录用户,以及维护用于服务器的身份验证令牌。
在文档之后,我添加了注册C2DM的代码并创建了一个BroadcastReceiver来接收响应。在我的BroadcastReceiver中,我正在调用包含注册ID的onReceive()方法。我可以在调试器中看到它并将其记录到控制台。
问题是我现在需要将ID发送到我的服务器,但我不能,因为我无法访问我的应用程序的其余部分。 BroadcastReceiver不是Intent或Context或我熟悉的任何其他东西。如果我只是拥有用户的身份验证令牌,我可以解决这个问题,但我也无法解决这个问题。我尝试将其作为注册意图的额外内容传递,但它在此过程中会丢失。
在onReceive()方法中获取额外内容或应用程序上下文的正确方法是什么?
谢谢, 弗兰克
答案 0 :(得分:1)
有一些很好的资源可以从中获取:
@Override
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
Log.d(TAG, "Got a reply from Google");
if (action.equals(REGISTER_ACTION))
{
handleRegistration(context, intent);
}
else if (action.equals(RECEIVE_ACTION))
{
handleMessage(context, intent);
}
else
{
Log.w(TAG, "Unexpected intent: " + intent);
}
}
private void handleRegistration(Context context, Intent intent)
{
String registrationId = intent.getStringExtra("registration_id");
String error = intent.getStringExtra("error");
String unregistered = intent.getStringExtra("unregistered");
if (error != null)
{
Log.e(TAG, "Registration failed: " + error);
this.getApp(context).disablePush();
}
else if (unregistered != null)
{
Log.d(TAG, "Unregistered: " + unregistered);
context.startService(new Intent(RegistrationService.COMPLETE_UNREGISTER_ACTION));
}
else if (registrationId != null)
{
Log.d(TAG, "Registered with registration ID [" + registrationId + "]");
// Send registrationId to the Application Server in a separate thread.
Intent i = new Intent(RegistrationService.COMPLETE_REGISTER_ACTION);
i.putExtra("regId", registrationId);
context.startService(i);
}
else
{
Log.d(TAG, "Other registration response: " + intent.getExtras());
}
}
如需更多阅读,请参阅Marakana