如何从broadcastReceiver中的GCM发送注册ID到主Activity

时间:2014-03-03 12:28:44

标签: android

我是android开发人员开发app.Here我从GCM获取注册ID并将其保存在字符串中,现在我想将此注册ID从broadcastreceiver类发送到我的mainActivity类,以便我可以将此值发送给我server。我正在尝试使用意图,但强制关闭总是发生。

GcmBroadcastreceiver.class的代码是

public void onReceive(Context context,Intent intent)     {

        String action=intent.getAction();
        Log.d("msg", action);

    if(action.equals("com.google.android.c2dm.intent.REGISTRATION"))
        {

            Log.d("msg", "within if loop");

            Bundle bundle = intent.getExtras();
            if (bundle != null) {
                Set<String> keys = bundle.keySet();
                Iterator<String> it = keys.iterator();
                Log.d("msg","Dumping Intent start");
                while (it.hasNext()) {
                    String key = it.next();
                //    Log.d("msg","[" + key + "=" + bundle.get(key)+"]");
              Toast.makeText(context,("msg"+"[" + key + "=" + bundle.get(key)+"]"), Toast.LENGTH_LONG).show();
                }
                Log.d("msg","Dumping Intent end");

            }
            String registrationId=intent.getStringExtra("registration_id");
            Toast.makeText(context, "reg is"+registrationId, Toast.LENGTH_LONG).show();

            Intent in=new Intent(context,MainActivity.class);
            in.putExtra("RegID", registrationId);
            context.startActivity(in);
            Toast.makeText(context, "Intent is send to mainactivity class", Toast.LENGTH_LONG).show();



         //   Log.d("regid", registrationId);
            String error=intent.getStringExtra("error");
            //Log.d("error", error);
            String unregistered=intent.getStringExtra("unregistered");
        //  Log.d("unregistered", unregistered);
        }

        else if(action.equals("com.google.android.c2dm.intent.RECEIVE"))
        {
            String data1=intent.getStringExtra("data1");
            Log.d("data1::",data1);
            String data2=intent.getStringExtra("data2");
            Log.d("data2::",data2);
        }

3 个答案:

答案 0 :(得分:0)

我更喜欢的简单方法是使用活动注册您的意图,在android清单中将该活动的属性启动模式设置为单个任务true,并在新意图中处理活动中的意图。现在你唯一需要做的就是从广播接收器调用这个意图,你希望发送给活动的内容在新的意图方法的活动中处理它。

答案 1 :(得分:0)

您必须在活动中创建另一个广播接收器,并将您的数据作为附加内容。

答案 2 :(得分:0)

在您的主活动中,创建一个BroadcastReceiver:

private BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        //post registration id to server
    }
};

在活动的onCreate注册此接收器:

registerReceiver(mReceiver, new IntentFilter("your_package_name.REGISTER_DEVICE"));

在您的活动的onDestroy()中,取消注册接收者:

if (mReceiver != null) {
    unregisterReceiver(mReceiver);
}

获得注册ID后,您可以向主要活动发送广播:

context.sendBroadcast(new Intent("your_package_name.REGISTER_DEVICE").putExtra("GCM_REG_ID", registrationId));

或者,您也可以使用LocalBroadcastManager;