1

運行我已經按照本教程中創建一個新的GCM Listener服務: http://www.appifiedtech.net/2015/08/01/android-gcm-push-notification-example/GcmListenerService當背景不同

爲聽衆服務的代碼:當應用程序正在運行

@Override 
public void onMessageReceived(String from, Bundle data) { 
    super.onMessageReceived(from, data); 
    String msg = data.getString("message"); 
    Log.d(TAG,"GCM Message received is "+msg); 
    // Notifying to user code goes here 
    notifyUser(getApplicationContext(),msg); 
} 

public void notifyUser(Context context,String data){ 
    Intent intent = new Intent(context, NotificationActivity.class); 
    intent.putExtra("data", data); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
      Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context); 
    builder.setSmallIcon(R.mipmap.ic_launcher); 
    builder.setAutoCancel(true); 
    builder.setContentTitle("New Notification"); 
    builder.setContentIntent(pendingIntent); 
    builder.setContentText(data); 
    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Uri uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    builder.setSound(uri); 
    notificationManager.notify(countNotification++, builder.build()); 
    Log.v(TAG,"count "+countNotification); 
} 

(前景),這工作正常,並啓動通知活動,因爲它應該。

然而,當它在後臺的運行,我得到的通知,但標題和正文都在我的服務器發送應用程序定義,並攻上需要我的主要活動。

  1. 這基本上意味着當它在後臺運行時,其他的東西會處理通知?我是否應該實施另一個處理程序,以便能夠管理該通知並將用戶發送到正確的活動?

  2. ,當我收到此通知的屏幕不醒來,也沒有LED燈在手機上的其它應用程序的通知做。你如何管理?

(權限,服務和接收器在清單中被定義爲在教程描述)

回答

1
  1. 在關於什麼時候你的應用程序在後臺運行其他東西處理通知的問題?

SO question可以幫助你在回答您關於GCM偵聽器服務問題

  • 在涉及到不清醒的時候,屏幕的問題你會收到通知。
  • 使用ACQUIRE_CAUSES_WAKEUP

    正常喚醒鎖定實際上並沒有打開照明。相反,它們會導致照明在打開後(例如,來自用戶活動)保持打開狀態。當WakeLock被採集時,該標誌將強制屏幕和/或鍵盤立即打開。一個典型的用途是對於用戶立即看到的重要通知。

    您可以訪問這個SO question中如何使用它。

    +0

    感謝KENdi,我自己想出了這兩個,但是我仍然無法使LED點亮GCMReceiver。 'builder.setLights(Color.BLUE,500,500);' 關於這個的任何想法? –

    +0

    讓LED也可以工作。出於某種原因,BLUE不工作,而GREEN很好。總之,對於我的問題,您需要使GCMReceiver的GCMListenerService實現幾乎相同。要喚醒處理器,您需要使用PowerManager newWakeLock和Acquire/Release。 –

    0

    您刪除

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
    Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    

    使用intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);

    在NotificationActivity類,你需要實現onNewIntent()回調,當您打開NotificationActivity存在堆棧。

    +0

    使用FLAG_ACTIVITY_SINGLE_TOP沒有什麼區別。我也把onNewIntent()的一個覆蓋在NotificationActivity沒有結果,和以前一樣。當應用程序在後臺時,當我點擊通知時只打開MainActivity –