Как получить активность, которая приостановлена ​​и идет в фоновом режиме? - PullRequest
0 голосов
/ 17 января 2020

У меня есть ситуация, когда мое приложение переходит в фоновый режим (не полностью убито!), А последняя активная активность была BActivity . В таком состоянии. Я получаю уведомление pu sh.

При нажатии на уведомление должно открываться последнее действие, открытое ранее, т. Е. ( BActivity ).

Вопрос Как открыть последнее заданное c приостановленное действие?

Является ли какой-либо ответ похожим на флаг установки или настройки манифеста?

Ответы [ 2 ]

1 голос
/ 17 января 2020

Если я правильно понял, вы хотите вернуть свое приложение на передний план после получения уведомления pu sh? В этом случае используйте следующий код:

Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                                                 
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(intent);

, где MainActivity - это средство запуска Activity, которое вы указали в AndroidManifest. xml.

Это должно вывести ваше приложение на передний план в своем предыдущем состоянии, если оно вообще было, и запустите MainActivity.

Для объяснения см. здесь .

0 голосов
/ 17 января 2020

Вы можете попытаться добавить обратный вызов жизненного цикла действия в свое приложение. И оцените тип активности текущей приостановленной или возобновленной активности, et c. Пример кода:

public static void init(Application app) {
        app.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {

            private int activityCount = 0;

            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                AppUtils.attachActivity(activity);
            }

            @Override
            public void onActivityStarted(Activity activity) {
                activityCount++;
                AppUtils.attachForeActivity(activity);
            }

            @Override
            public void onActivityResumed(Activity activity) {
                if (!isForeGround) {
                    isForeGround = true;
                    notifyForegroundChange(true);
                }
            }

            @Override
            public void onActivityPaused(Activity activity) {
                // no-op
            }

            @Override
            public void onActivityStopped(Activity activity) {
                AppUtils.detachForeActivity(activity);
                activityCount--;
                if (activityCount == 0) {
                    isForeGround = false;
                    notifyForegroundChange(false);
                    Log.i(TAG, "Activity foreground: " + System.currentTimeMillis());
                }
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                // no-op
            }

            @Override
            public void onActivityDestroyed(Activity activity) {
                AppUtils.detachActivity(activity);
            }
        });
    }

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

Надеюсь, это поможет!

...