0

在我的應用程序中,我有一個接收來自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

相關問題