2017-02-18 6 views
-3

Я работаю над проектом, и я использую Intent Service с wakefulBroadcastReceiver, чтобы запланировать будильник и отправить уведомление. На данный момент проблем нет. Но я хочу, когда я открою свое приложение, оно не будет отображать уведомление снова. Пожалуйста, задумайтесь над этой проблемой ?.Уведомление Android: не показывать уведомления, когда приложение открыто?

ответ

0

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

Это код, который нужно проверить, есть ли у вас приложение в фоновом режиме или нет.

public class MyGcmPushReceiver extends GcmListenerService { 

    /** 
    * Called when message is received. 
    * @param from SenderID of the sender. 
    * @param bundle Data bundle containing message data as key/value pairs. 
    *    For Set of keys use data.keySet(). 
    */ 
    @Override 
    public void onMessageReceived(String from, Bundle bundle) { 
     // Check here whether the app is in background or running. 
     if(isAppIsInBackground(getApplicationContext())) { 
      // Show the notification 
     } else { 
      // Don't show notification 
     } 
    } 

     /** 
     * Method checks if the app is in background or not 
     */ 
     private boolean isAppIsInBackground(Context context) { 
      boolean isInBackground = true; 

      ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { 
       List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
       for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
        if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
         for (String activeProcess : processInfo.pkgList) { 
          if (activeProcess.equals(context.getPackageName())) { 
           isInBackground = false; 
          } 
         } 
        } 
       } 
      } 
      else 
      { 
       List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1); 
       ComponentName componentInfo = taskInfo.get(0).topActivity; 
       if (componentInfo.getPackageName().equals(context.getPackageName())) { 
        isInBackground = false; 
       } 
      } 
      return isInBackground; 
     } 
} 
+0

Я называю метод выше внутри onCreate activity? @Мистер. Rabbit –

+0

yes call is from activity, но опубликуйте это в классе приложения – user3040153

+0

@FinnD Этот метод необходимо вызвать внутри вашего ресивера, а не в onCreate. Я отредактировал ответ, который показывает пример для приемника GCM, если вы используете его. –

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