我是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);
}
答案 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;