0

В моем приложении у меня есть широковещательный приемник, который получает сообщение от push-сообщения GCM. Он работает правильно, когда приложение открыто. Мое приложение успешно генерирует уведомление с моим сообщением, а затем транслирует его, и когда моя MainActivity приходит, получает это сообщение и показывает.Reciver не работает, когда приложение закрыто

но проблема, когда приложение закрыто. Уведомление генерируется успешно с сообщением, но когда mainActivity работает, получать нечего.

Я хочу синхронизировать мой приемник с моим приложением, чтобы, если приходит сообщение и мое приложение близко или нет, оно должно показывать мое сообщение. но я попытался зарегистрировать другой приемник вне моей деятельности с его собственным классом:

public class MahdiReceiver extends BroadcastReceiver { 

, зарегистрированный в манифесте. , но он не синхронизируется с моей задачей. Мне нужно больше дополнительного намерения для putextra моего сообщения для синхронизации. но таким образом, когда мое приложение открыто, оно не работает. потому что я получаю дополнительные потребности, мои действия закрываются и открываются снова. так что лучший способ?

это мой MainActivity с приемником:

private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.i("LOG", "unreciver"); 
      String newMessage = intent.getExtras().getString(EXTRA_MESSAGE); 
      // Waking up mobile if it is sleeping 
      WakeLocker.acquire(getApplicationContext()); 

      /** 
      * Take appropriate action on this message 
      * depending upon your app requirement 
      * For now i am just displaying it on the screen 
      * */ 

      //Showing received message 
      //lblMessage.append(newMessage + "\n"); 
      Log.i("LOG", "unreciver messsage:"+newMessage); 
      //Toast.makeText(getApplicationContext(), "New Message: " + newMessage, Toast.LENGTH_LONG).show(); 
      loadReciverDialog(newMessage); 
      // Releasing wake lock 
      WakeLocker.release(); 
     } 
    }; 

это является частью службы, которые получают сообщение от GCM и Создать уведомление:

 @Override 
     protected void onMessage(Context context, Intent intent) { 

      Log.i(TAG, "Received message"); 
      String message = intent.getExtras().getString("price"); 

      Log.i("LOG", "GCM service Message "+message); 

      displayMessage(context, message); 
      // notifies user 
      generateNotification(context, message); 
     } 

private static void generateNotification(Context context, String message) { 

     Log.i("LOG", "genetaret notify"); 
     int icon = R.drawable.ic_launcher; 
     long when = System.currentTimeMillis(); 
     NotificationManager notificationManager = (NotificationManager) 
       context.getSystemService(Context.NOTIFICATION_SERVICE); 
     Notification notification = new Notification(icon, message, when); 

     String title = context.getString(R.string.app_name); 

     Intent notificationIntent = new Intent(context, MainActivity.class); 

     // set intent so it does not start a new activity 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
       Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     PendingIntent intent = 
       PendingIntent.getActivity(context, 0, notificationIntent, 0); 
     notification.setLatestEventInfo(context, title, message, intent); 
     notification.flags |= Notification.FLAG_AUTO_CANCEL; 

     // Play default notification sound 
     notification.defaults |= Notification.DEFAULT_SOUND; 

     //notification.sound = Uri.parse("android.resource://" + context.getPackageName() + "your_sound_file_name.mp3"); 


     // Vibrate if vibrate is enabled 
     notification.defaults |= Notification.DEFAULT_VIBRATE; 
     notificationManager.notify(0, notification);  

    } 

} 

и эта часть дисплея сообщение:

static void displayMessage(Context context, String message) { 
     Intent intent = new Intent(DISPLAY_MESSAGE_ACTION); 
     intent.putExtra(EXTRA_MESSAGE, message); 
     intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
     Log.i("LOG", "commonutils msg="+message); 
     context.sendBroadcast(intent); 

    } 

ответ

0
private final BroadcastReceiver mHandleMessageReceiver = new BroadcastReceiver() 

Вы создаете свой BroadcastReceiver во время выполнения - очевидно, что он не может получать события, если ваше приложение закрыто, потому что оно не существует в этой точке.

Чтобы получать события, когда ваше приложение закрыто, вам необходимо создать класс, который расширяет BroadcastReceiver, а затем зарегистрировать этот класс в AndroidManifest.xml.

Возможно, вы захотите зарегистрироваться this tutorial.

+0

Я вношу изменения и новый приемник с классом и регистрирую его, но все еще имею проблемы с передачей параметров с основным видом деятельности. Я хочу спросить, как зарегистрировать этот приемник (приемник основной деятельности), чтобы он мог правильно использовать. – Kenji

+0

Проблема заключается в синхронизации приемника с основной активностью – Kenji

Смежные вопросы