2017-01-27 4 views
1

эй все, что у меня сложная проблема и вам нужен совет. Я создал уведомление вручную после получения полезной нагрузки данных FCM. Это как уведомление будет создаваться как на переднем и заднем плане, поскольку его полезная нагрузка данных:android Уведомление - как не показать на переднем плане

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 


    // Check if message contains a data payload. 
    if (remoteMessage.getData().size() > 0) { 

     String msg = remoteMessage.getData().get("message"); 
     sendNotification(msg); 
    } 

private PendingIntent createIntent(String msg) { 
    Intent intent = new Intent(this, SportsActivity.class); 
    Bundle b = new Bundle(); 
     b.putString(Constants.KEY_GO_TO_TAB, Constants.KEY_DASHBOARD_HOCKEY_SCORE_TAB); 
    intent.putExtras(b); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
      PendingIntent.FLAG_ONE_SHOT); 
    return pendingIntent; 
} 

private void sendNotification(String messageBody) { 
    Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    android.support.v4.app.NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.notification_icon) 
      .setStyle(new NotificationCompat.BigTextStyle() 
        .bigText(messageBody)) 
      .setContentText(messageBody) 
      .setColor(ContextCompat.getColor(this, R.color.hockey_brand)) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(createIntent(messageBody)); 

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

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

}

это, кажется, функционирует нормально. Проблема, связанная с тем, что я хочу, чтобы уведомление было НЕ ПОКАЗАНО, когда приложение находится на переднем плане. нет ли способа сделать это без сканирования задачи? поскольку для этого требуется разрешение

Я читал this article, но это, как узнать, что вы перешли с переднего плана на задний план. также android.permission.GET_TASKS устарел, и REAL_GET_TASKS разрешено не для стороннего пользователя. Я просто хочу знать в любой момент, что пользователь либо на переднем плане, либо на заднем плане, поэтому я знаю, должен ли я показывать уведомление или нет. Интересно, есть ли у самой базы огня что-то. Когда вы отправляете «Полезную информацию для уведомлений» с консоли firebase, если приложение не находится на переднем плане, на панели уведомлений не отображается, поэтому должен быть способ сделать это.

+0

возможно [это SO сообщение] (http://stackoverflow.com/a/39589766/5015207) полезно? – 0X0nosugar

+0

спасибо, хотя андроид.permission.GET_TASKS - это устаревшее разрешение, на которое я верю. скажите мне, если я ошибаюсь. Я даже не вижу его в списке permssions больше. и im поддерживает api 19, поэтому я не могу использовать getAppTasks(); знаете ли вы, что android.permission.GET_TASKS - опасное разрешение? – j2emanue

+0

Код фрагмента Juozas Kontvainis, похоже, не нуждается в каком-либо разрешении. Полагаю, это потому, что он просто пытается получить информацию о своем собственном приложении. – 0X0nosugar

ответ

0

В качестве альтернативы вы можете не показывать свое уведомление, когда ваше приложение находится на переднем плане, путем применения Application.ActivityLifecycleCallbacks в вашем приложении.

Затем вы можете проверить, находится ли ваше приложение на переднем плане или на заднем плане.

Source

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

  • Нет связанных вопросов^_^