Java 单击通知开始活动时控制后退

Java 单击通知开始活动时控制后退,java,android,android-notifications,Java,Android,Android Notifications,当应用程序处于后台且应用程序打开并跳转到PickUpActivity时,用户单击通知 NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); int notificationId = (int) System.currentTimeMillis(); Intent picukUpIntent = new Intent(context, PickUp

当应用程序处于后台且应用程序打开并跳转到PickUpActivity时,用户单击通知

NotificationManager mNotifyMgr = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
int notificationId = (int) System.currentTimeMillis();
Intent picukUpIntent = new Intent(context, PickUpActivity.class);
picukUpIntent.putExtra(MainScreenActivity.ORDER_ID, orderId);
picukUpIntent.putExtra(NOTI_TYPE, 3);
pendingIntent = PendingIntent.getActivity(
                   context,
                   notificationId,
                   picukUpIntent,
                   PendingIntent.FLAG_ONE_SHOT
                );

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_mini_logo)
                    .setContentTitle("Title")
                    .setContentText(message)
                    .setVisibility(Notification.VISIBILITY_PUBLIC)
  .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
                    .setAutoCancel(true);
builder.setContentIntent(pendingIntent);
mNotifyMgr.notify(notificationId, builder.build());
当用户在应用程序处于后台时单击通知时,它会像我预期的那样跳转到PickUpActivity。问题是,当用户单击“向上”或“后退”按钮时,它会退出应用程序。我希望当用户单击后退或向上按钮时,它跳转到MainScreenActivity。当用户在应用程序处于foregroud时单击通知时,这种方法就可以正常工作。所以我不想覆盖PickUpActivity中的后退和向上按钮行为。 有没有办法将PickUpActivity的父级设置为MainScreenActivity 我确实在清单中设置了父项,但它不起作用

<activity
    android:name=".screen.rating.PickUpActivity"
    android:parentActivityName=".screen.main.MainScreenActivity"
    android:screenOrientation="portrait">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".screen.main.MainScreenActivity" />
</activity>

将此添加到您的通知活动中的
on backpressed

在通知活动中的putextra()之后开始。“onCreat()


将此添加到您的通知活动中的“反压”

在通知活动中的putextra()之后开始。“onCreat()


当应用程序处于后台或前台时,您需要标识应用程序状态,以便使用下面的方法可以标识应用程序状态

public static 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;
    }

当应用程序处于后台或前台时,您需要标识应用程序状态,以便使用下面的方法可以标识应用程序状态

public static 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;
    }

我不想覆盖Backpress我不想覆盖Backpress Edit并不能解决我的问题,因为如果用户可以点击up或back按钮,应用程序当然是在前台。但我也需要在我的应用程序和你的代码完美的工作代码。非常感谢你!这意味着你对我说用户何时按下后退按钮?当用户按下主页按钮或后退按钮时,创建一个功能并在两个位置调用用户单击通知->开始活动->按下后退按钮。无论如何,我确实需要你的代码,它的工作非常完美。谢谢如果回答对你有帮助,那么你能接受吗,因为对另一个有帮助它不能解决我的问题,因为如果用户可以点击向上或后退按钮,当然应用程序是在前台。但我也需要在我的应用程序和你的代码完美的工作代码。非常感谢你!这意味着你对我说用户何时按下后退按钮?当用户按下主页按钮或后退按钮时,创建一个功能并在两个位置调用用户单击通知->开始活动->按下后退按钮。无论如何,我确实需要你的代码,它的工作非常完美。谢谢如果答案对你有帮助,那么你能接受吗?因为对另一个答案有帮助
public static 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;
    }
 @Override
    public void onBackPressed() {
        super.onBackPressed();
        if(NotificationUtils.isAppIsInBackground(context)){
            //open your main screen activity MainScreenActivity.class
        }else{
            // what you want
        }
    }