2016-12-31 12 views
1

私はGCMを使用していますが、私はonResume()からBroadcastReceiverを登録して通知を受け取ったときに1つの問題に直面していますが、ときどき私のonResume()機能がこれが原因で2回呼び出されています問題。なぜこれが2回働いているのか分かりません。アンドロイドで2回呼び出し機能。

コードGCM目的のサービスクラスについて:活動の

if (!extras.isEmpty()) { 

     if (GoogleCloudMessaging. 
       MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { 

      sendNotification(this, msgg); 


     } else if (GoogleCloudMessaging. 
       MESSAGE_TYPE_DELETED.equals(messageType)) { 

      sendNotification(this, msgg); 
      updateMyActivity(this, msgg); 
      bundle.putString("result", msgg); 
      receiver.send(STATUS_FINISHED, bundle); 

     } else if (GoogleCloudMessaging. 
       MESSAGE_TYPE_MESSAGE.equals(messageType)) { 
      updateMyActivity(this,msgg); 
      sendNotification(this, msgg); 



     } 
    } 
// GcmBroadcastReceiver.completeWakefulIntent(intent); 
    GcmBroadcastReceiver.completeWakefulIntent(intent); 

} 



     //This function will create an intent. This intent must take as parameter the "unique_name" that you registered your activity with 
static void updateMyActivity(Context context, String message) { 


    Log.e(TAG, "updateMyActivity: "); 

    Intent intent = new Intent("unique_name"); 

    //put whatever data you want to send, if any 
    intent.putExtra("message", message); 

    //send broadcast 
    context.sendBroadcast(intent); 
} 

onResume()方法:

 @Override 
     public void onStart() 
      { 
      super.onStart(); 
       onResume(); 
      } 


@Override 
public void onResume() { 
    super.onResume(); 


    IntentFilter intentFilter = new IntentFilter(
      "unique_name"); 

    mMessageReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      //extract our message from intent 
      String msg_for_me = intent.getStringExtra("message"); 

    } 

が、私はこの "msg_for_me" 2回を持っています。スクリーンショットを確認する。 http://prntscr.com/dpzxrs

+2

なぜあなたはONSTARTでonResumeを呼ぶのですか? – 2ndGAB

+0

もし私がそれを呼んでいないのであれば、私の履歴書は常に時間のためだけに働いているわけではありません。@ 2ndGAB –

+0

「仕事していない」とは何を意味するのですか?他のものは、コピー/貼り付けの間違いですか、あなたの放送受信機がonResume()にありますか?あなたはonCreate()とそれに続いてregisterReceiver()コールとunRegisterReceiver()をDestroy()で使うのが良いでしょう。 – 2ndGAB

答えて

0

あなたのコードにはいくつかの間違いがあると思います。

まずあなたonResume()BroadcastReceiverを入れないでください、それはメッセージで渡されたとしてintentを作成し、BroadcastReceiverを登録しません。あなたMainActivity

、あなたがより良いことのように行うだろう:

public class MainActivity extends AppCompatActivity { // or any other Activity like 

    private BroadcastReceiver mMessageReceiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     Log.v(Constants.APP_TAG, "MainActivity: onCreate"); 

     mMessageReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 

       Log.v(Constants.APP_TAG, "MainActivity: mMessageReceiver "); 

       String msg_for_me = intent.getStringExtra("message"); 

      } 
     }; 

     LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver , 
       new IntentFilter(Constants.REGISTRATION_COMPLETE)); 

    } 

    @Override 
    protected void onDestroy() { 

     Log.v(Constants.APP_TAG, "MainActivity: onDestroy"); 
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    } 
} 
関連する問題