На выходе из системы, ясной стопке истории Действия, препятствуя тому “назад”, чтобы кнопка открыла только зарегистрированные Операции

Все операции в моем приложении требуют, чтобы пользователь был зарегистрирован к представлению. Пользователи могут зарегистрироваться почти из любого действия. Это - требование приложения. В любой точке, если пользователь выходит из системы, я хочу отправить пользователя во Вход в систему Activity. В этой точке я хочу, чтобы это действие было у основания стопки истории так, чтобы нажатие "задней" кнопки возвратило пользователя главному экрану Android.

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

Я попытался открыть Действия со входом путем установки Intent флаги к FLAG_ACTIVITY_CLEAR_TOP который, кажется, делает, как обрисован в общих чертах в документации, но не достигает моей цели размещения Действий со входом у основания стопки истории, и препятствование тому, чтобы пользователь перешел назад к ранее замеченному, вошло в систему операции. Я также пытался использовать android:launchMode="singleTop" для Действий со входом в декларации, но это не выполняет мою цель ни один (и, кажется, не имеет никакого эффекта так или иначе).

Я полагаю, что должен или очистить стопку истории или закончить все ранее - открытые операции.

Одна опция состоит в том, чтобы иметь каждое действие onCreate проверьте вошел в систему состояние, и finish() если не вошел в систему. Мне не нравится эта опция, поскольку кнопка "Назад" все еще будет доступна для использования, перейдя назад, поскольку операции закрывают себя.

Следующая опция состоит в том, чтобы поддержать a LinkedList из ссылок на все открытые операции, который статически доступен отовсюду (возможно, использующий слабые ссылки). На выходе из системы я получу доступ к этому списку и выполню итерации по всем ранее открытым операциям, вызывая finish() на каждом. Я, вероятно, начну реализовывать этот метод скоро.

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

Есть ли способ выполнить это при помощи Intent или явные настройки, или моя вторая опция, поддерживая a LinkedList из открытых операций наилучший вариант? Или есть ли другая опция, которую я полностью пропускаю?

228
задан Cœur 3 September 2017 в 06:11
поделиться

2 ответа

Я могу предложить вам другой подход, ИМХО, более надежный. В основном вам нужно транслировать сообщение о выходе из системы для всех ваших действий, которые должны оставаться в состоянии входа в систему. Таким образом, вы можете использовать sendBroadcast и установить BroadcastReceiver во всех ваших Actvities. Примерно так:

/** on your logout method:**/
Intent broadcastIntent = new Intent();
broadcastIntent.setAction("com.package.ACTION_LOGOUT");
sendBroadcast(broadcastIntent);

Получатель (защищенное действие):

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    /**snip **/
    IntentFilter intentFilter = new IntentFilter();
    intentFilter.addAction("com.package.ACTION_LOGOUT");
    registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d("onReceive","Logout in progress");
            //At this point you should start the login activity and finish this one
            finish();
        }
    }, intentFilter);
    //** snip **//
}
208
ответ дан 23 November 2019 в 03:44
поделиться

Один из вариантов состоит в том, чтобы onCreate для каждого действия проверял состояние входа в систему и finish (), если журнал не зарегистрирован - в. Мне не нравится эта опция, так как кнопка «Назад» по-прежнему будет доступна для использования, позволяя возвращаться назад, когда действия закрываются.

Что вы хотите сделать, так это вызвать logout () и finish () в ваших методах onStop () или onPause (). Это заставит Android вызвать onCreate (), когда действие будет возобновлено, поскольку оно больше не будет находиться в его стеке действий. Затем сделайте, как вы говорите, в onCreate () проверьте состояние входа в систему и перейдите к экрану входа в систему, если вы еще не вошли в систему.

Еще вы можете проверить состояние входа в систему в onResume (), и, если вы не вошли в систему, завершить ( ) и запустите логин.

-1
ответ дан 23 November 2019 в 03:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: