2016-09-03 8 views
1

Я использую службу сообщений Firebase для получения Push-уведомлений. Все работает очень хорошо, если мой экран разблокирован.Android: уведомление не вибрирует/звучит/мигает, когда экран заблокирован

Когда мой экран заблокирован, я получаю уведомление, но мой телефон не производит никакого звука, не вибрирует, и мой свет не мигает.

Это мой код, чтобы сгенерировать сообщение:

private void sendNotification(String messageBody, String messageTitle) { 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(messageTitle) 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setLights(Color.CYAN, 1, 1) 
      .setPriority(Notification.PRIORITY_MAX) 
      .setVisibility(Notification.VISIBILITY_PUBLIC) 
      .setContentIntent(pendingIntent); 

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

    notificationManager.notify(0, notificationBuilder.build()); 
} 
+0

Он работает, когда экран включен? –

ответ

0

Используй это для уведомления отправить эту работу отлично

private static final long[] vPattern = new long[]{1000, 1000, 1000, 1000, 1000}; 

public static void sendNotification(Context ctx, NotificationData notificationData) { 
     try { 
      NotificationManager mNotificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE); 
      Integer notifiId = (int) System.currentTimeMillis(); 
      Intent intent_for_Notification = new Intent(); 
      Bundle b = new Bundle(); 
      b.putSerializable(Constants.NOTIFICATION_DATA, notificationData); 
      NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(ctx); 
      mBuilder.setStyle(new NotificationCompat.BigTextStyle().bigText(notificationData.msg)); 
      mBuilder.setContentText(notificationData.msg); 
      mBuilder.setContentTitle(ctx.getResources().getString(R.string.app_name)); 
      intent_for_Notification.putExtras(b); 
      intent_for_Notification.setClass(ctx, SplashActivity.class); 
      intent_for_Notification.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent contentIntent = PendingIntent.getActivity(ctx, notifiId, intent_for_Notification, 0); 
      mBuilder.setContentIntent(contentIntent); 
      mBuilder.setSmallIcon(R.mipmap.ic_launcher_196); 
      mBuilder.setVibrate(vPattern); 
      mBuilder.setPriority(Notification.PRIORITY_HIGH); 
      mBuilder.setAutoCancel(true); 
      mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)); 
      mNotificationManager.notify(notifiId, mBuilder.build()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
0

Вы включаете <uses-permission android:name="android.permission.WAKE_LOCK" /> в манифесте?

Одним из законных случаев использования блокировки бодрствования может быть фоновая служба, которая должна захватить блокировку слежения, чтобы поддерживать работу ЦП, пока экран выключен. Опять же, эта практика должна быть сведена к минимуму из-за ее влияния на срок службы батареи. - Android Developers documentation

Вы можете попробовать добавить notificationBuilder.setDefault(defaults) как я замечаю некоторые из телефона не производят никакого звука даже вы установили .setSound(defaultSoundUri).

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
     .setSmallIcon(R.mipmap.ic_launcher) 
     .setContentTitle(messageTitle) 
     .setContentText(messageBody) 
     .setAutoCancel(true) 
     .setSound(defaultSoundUri) 
     .setLights(Color.CYAN, 1, 1) 
     .setPriority(Notification.PRIORITY_MAX) 
     .setVisibility(Notification.VISIBILITY_PUBLIC) 
     .setContentIntent(pendingIntent); 

//Added defaults 
int defaults = 0; 
    defaults |= android.app.Notification.DEFAULT_SOUND; 
    defaults |= android.app.Notification.DEFAULT_VIBRATE; 
    notificationBuilder.setDefaults(defaults); 

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

notificationManager.notify(0, notificationBuilder.build());