2016-06-07 87 views
1

問題通知振動,聲音,當屏幕被鎖定

我收到GCM通知,但是當我的屏幕被鎖定或關閉,然後我的震動和聲音不工作。 我試圖添加wakelock,但通過GCMListenerService的外觀,當觸發通知時,已經有一個清醒的意圖。 我該怎麼做才能使它工作?我失蹤的棋子在哪裏?

編輯

  • 當屏幕打開和解鎖我的震動工作。
  • 我發現GcmListenerService負責部分,用於接收GCM推送通知,它看起來像喚醒鎖定是越來越刪除(下面的代碼)

Bundle var2 = var1.getExtras(); var2.remove("message_type"); var2.remove("android.support.content.wakelockid");

CODE

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.ic_notification_icon) 
      .setContentTitle(getString(R.string.new_notification)) 
      .setContentText(body) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setVibrate(new long[] {1000, 1000, 1000}) 
      .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary)) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    Notification notification = notificationBuilder.build(); 
    notification.defaults |= Notification.DEFAULT_VIBRATE; 
    notification.defaults |= Notification.DEFAULT_SOUND; 

    PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG"); 
    wl.acquire(10000); 

    notificationManager.notify(0, notification); 
+0

你加'<使用許可權的android:NAME =「android.permission.VIBRATE」 />' –

+0

@Logic是的,當然 – JakubW

回答

0

所以事實證明,當你的通知包含data payloadnotification payload那麼Android的鎖定模式從即使壽你已經代碼自定義一個playload創建通知。不需要

喚醒鎖定 - GcmListenerService將決定它自己如果需要,只要你有<uses-permission android:name="android.permission.WAKE_LOCK" />

0

您需要在您的服務器端代碼上添加此標誌delay_while_idle=true。 看到here

+0

根據你發佈的鏈接,當數據沒有被設備收到時,這個標誌是必需的。在我的情況下,我確實收到通知及其所有數據。唯一的問題是它的聲音和震動沒有被觸發。 – JakubW

+0

是的,我明白你的意思,當設備處於睡眠模式或解鎖狀態時,你沒有收到通知。我在服務器端設置了delay_while_idle = false,現在按照我的預期工作。 – Meenaxi