2016-12-31 7 views
1

Я работаю с GCM, но сталкиваюсь с одной проблемой, когда я получил уведомление. Я регистрирую свой BroadcastReceiver из моего onResume(), но иногда моя функция onResume() звонит 2 раза из-за этого я сталкиваюсь проблема. Я не понимаю, почему это работает 2 раза.вызов функция 2 раз в android. Не удалось предотвратить столкновение 3 веб-сервисов

Код для умысел класса г см службы:

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

Почему вы называете onResume в OnStart? – 2ndGAB

+0

Потому что, если я не называю это, то мое резюме fucntion не работает на все время, работая только на время @ 2ndGAB –

+0

Что значит «не работает», это не делает работу, или она не называется. Другое дело, это ошибка копирования/вставки или ваш широковещательный приемник находится в onResume() ?? Вам лучше поместить его в onCreate(), за которым следует вызов registerReceiver() и unRegisterReceiver() в разделе Destroy() – 2ndGAB

ответ

0

Я думаю, что в вашем коде есть несколько ошибок.

Во-первых, не поставить вас BroadcastReceiver в onResume(), не создают 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); 
    } 
}