2014-03-03 59 views
1

我是Android開發人員開發應用程序。在這裏我從GCM獲取註冊ID並將其保存在一個字符串中,現在我想從廣播接收器發送此註冊ID類到我的mainActivity類,以便我可以將這個值發送到我的服務器。我試圖使用intent但強制關閉始終發生。對於GcmBroadcastreceiver.class我如何發送註冊ID從GCM在broadcastReceiver獲取主要活動

代碼

公共無效的onReceive(上下文語境,意圖意圖) {

 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

請發佈您的logcat –

回答

0

在您的主要活動中,創建一個BroadcastReceiver爲:

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

在您的活動onDestroy(),註銷接收器:

private BroadcastReceiver mReceiver = new BroadcastReceiver() { 

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

在你的活動onCreate作爲註冊此接收器

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

一旦您獲得註冊N ID,您可以發送廣播到您的主要活動爲:

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

或者,您也可以使用LocalBroadcastManager也;

1

簡單的方法,我寧願是一個活動註冊你的意圖,設置活動的財產啓動模式作爲單個任務在Android清單中爲true,並在新的意圖中處理該活動中的意圖。現在只需要從廣播接收器中調用該意圖,並將要發送給活動的內容在活動的新意圖方法中處理它。

0

您必須在您的活動中創建另一個廣播接收器,並將您的數據作爲臨時演員。