在C2DM注册过程中将额外数据传递给C2DMReceiver?

时间:2011-05-26 21:56:18

标签: android android-c2dm

我正在现有的客户端/服务器Android应用程序上设置C2DM。该应用程序已经有一组已建立的类,用于与服务器通信,记录用户,以及维护用于服务器的身份验证令牌。

在文档之后,我添加了注册C2DM的代码并创建了一个BroadcastReceiver来接收响应。在我的BroadcastReceiver中,我正在调用包含注册ID的onReceive()方法。我可以在调试器中看到它并将其记录到控制台。

问题是我现在需要将ID发送到我的服务器,但我不能,因为我无法访问我的应用程序的其余部分。 BroadcastReceiver不是Intent或Context或我熟悉的任何其他东西。如果我只是拥有用户的身份验证令牌,我可以解决这个问题,但我也无法解决这个问题。我尝试将其作为注册意图的额外内容传递,但它在此过程中会丢失。

在onReceive()方法中获取额外内容或应用程序上下文的正确方法是什么?

谢谢, 弗兰克

1 个答案:

答案 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