Подтвердить что ты не робот

Автоматическое выключение Android, когда приложение переходит на задний план

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

... НО... как всегда есть клиент, который хочет определенного поведения...

У нас есть приложение с высокими требованиями безопасности. Клиент хочет, чтобы приложение выходило из сервера, когда приложение переходит в фоновый режим по какой-либо причине (телефонный звонок, HOME-ключ, назад к последней активности) ( * *, чтобы уточнить, я имею в виду, что когда передняя активность на экран не относится к моим приложениям **).

Итак, если я не могу зацепить ключ HOME, какие другие параметры есть? Очевидно, что просто подключение onPause() не поможет, потому что это Activity -специфическое.

"Лучший", который мы придумали, состоит в том, чтобы сохранить массив ссылок на действия в нашем классе Application. В каждом действии onResume() мы добавляем его в этот массив. В onPause() мы удалим его. Также в onPause() мы перечисляем этот массив, чтобы узнать, находится ли какой-либо из зарегистрированных действий на переднем плане. Если активность переднего плана не обнаружена, пользователь выйдет из системы.

Я недоволен этим как решением и надеюсь найти лучший способ.

4b9b3361

Ответ 2

//использовать службу

//в том, что

@Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);

      IntentFilter filter = new IntentFilter();
     filter.addAction(Intent.ACTION_SCREEN_OFF);
     filter.addAction(Intent.ACTION_CALL);
     filter.addAction(Intent.ACTION_ANSWER);

     registerReceiver(mIntentReceiver, filter);

}

//затем в BroadcastReceiver

private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();

            if(action.equalsIgnoreCase("android.intent.category.HOME") )
            {
//logout logic
} 
else if(action.equalsIgnoreCase("android.intent.action.SCREEN_OFF") )
            {
//logout logic
}

else if(action.equalsIgnoreCase("android.intent.action.DIAL") )
            {
//logout logic
}
else if(action.equalsIgnoreCase("android.intent.action.CALL")){
/    /logout logic
}
}

Ответ 3

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

Если вам необходимо физически выполнить выход из системы (то есть на удаленном сервере), настройте AlarmManager, когда действие приостанавливается для выхода из системы в течение шести секунд в будущем. Вы можете отменить этот Тревога, если начинается еще одно действие.

Ответ 4

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

Ответ 5

Или вы можете использовать общий объект, который имеет один синглтон, и создавать одиночные onPause() и onResume(), которые будут получать/устанавливать данные на этом общем объекте. Эти функции будут использоваться во всех действиях onPause и onResume.

Ответ 6

Это должно помочь:

Это метод, найденный в классе Activity

protected void onUserLeaveHint ()

    Since: API Level 3
    Called as part of the activity lifecycle when an activity is about to go into the background as the result of user choice. For example, when the user presses the Home key, onUserLeaveHint() will be called, but when an incoming phone call causes the in-call Activity to be automatically brought to the foreground, onUserLeaveHint() will not be called on the activity being interrupted. In cases when it is invoked, this method is called right before the activity onPause() callback.
    This callback and onUserInteraction() are intended to help activities manage status bar notifications intelligently; specifically, for helping activities determine the proper time to cancel a notfication.

Ответ 7

Я не знаю, поможет ли он вам помочь, но я попытаюсь таким образом

  • Создайте базу Activity и переопределите ее метод onStop() для выхода с сервера
  • Все Activities моего приложения будут расширены над базовым классом.

Итак, что происходит, если на какой-либо Activity переходит в onStop условие, он выйдет из сервера независимо от того, как Activity переходит в фоновый режим.

Примечание: Но если вы с вашего кода прекратите любое действие, нажав "Закончить", то он также выйдет из системы, поэтому вам придется работать в этом сценарии

Ответ 8

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