Уведомление о событии щелчка в строке состояния Android для фонового состояния приложения на переднем плане

#java #android #google-cloud-messaging #android-pendingintent

# #java #Android #google-облако-обмен сообщениями #android-pendingintent

Вопрос:

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

 public static boolean isActivityVisible() {
    return activityVisible;
}

public static void activityResumed() {
    activityVisible = true;
}

public static void activityPaused() {
    activityVisible = false;
}

private static boolean activityVisible;
 

и добавляю их для всех моих действий

 @Override
protected void onResume() {
  super.onResume();
  MyApplication.activityResumed();
}

@Override
protected void onPause() {
  super.onPause();
  MyApplication.activityPaused();
}
 

для уведомления я использую этот код

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

        Notification notification = new Notification.Builder(context)
                .setContentTitle(title).setContentText(message)
                .setSmallIcon(R.drawable.ic_on).build();

        Intent notificationIntent = new Intent(context,
                AppStartActivty.class);
        notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent intent = PendingIntent.getActivity(context, 0,
                notificationIntent, 0);
        notification.flags |= Notification.FLAG_AUTO_CANCEL;

        notification.defaults |= Notification.DEFAULT_SOUND;

        notification.defaults |= Notification.DEFAULT_VIBRATE;
        notificationManager.notify(0, notification);
 

где я поставил это условие, чтобы проверить это состояние приложения и поведение при нажатии уведомления.
извините за мой плохой английский

Комментарии:

1. Вы хотите проверить, находится ли ваше приложение на переднем плане или в фоновом режиме, с помощью уведомления, верно?

2. @MSS да и по щелчку, если мое приложение находится в фоновом режиме, я хочу открыть его, в противном случае только отмена уведомления

3. да, вы можете сделать это, внедрив сервис.

4. @MSS можете ли вы, пожалуйста, сообщить мне процедуру или любую демонстрационную ссылку для нее.

Ответ №1:

Вы можете проверить, находится ли ваше приложение в фоновом режиме / на переднем плане, используя приведенный ниже код.

 ActivityManager activityManager = (ActivityManager)this.getSystemService(Context.ACTIVITY_SERVICE);
            ArrayList<ActivityManager.RunningAppProcessInfo> appInfo = (ArrayList)activityManager.getRunningAppProcesses();
            for (ActivityManager.RunningAppProcessInfo app : appInfo) {
                Log.d(TAG, "App: "   app.processName   "    State: "   (app.importance == 100 ? "Foreground" : "Background"));
                if (app.processName.equals(YourApp().getPackageName())) {
                    Log.d(TAG, app.processName);
                    if (app.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                       // Cancel notification
                    }
                    break;
                }
            }