Как выйти из системы, если он помещает приложение в фоновом режиме / неактивно для приложения в Android / Kotlin? - PullRequest
0 голосов
/ 23 апреля 2019

Я отправляю этот вопрос, так как не нашел идеального решения.Я хочу выйти из системы, если пользователь нажал кнопку «Домой» или не активировал приложение в течение 5 минут.

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

 timer = object : CountDownTimer((1 * 60 * 1000).toLong(), 1000) {
            override fun onTick(millisUntilFinished: Long) {
                Toast.makeText(this@MainActivity, "Ticking", Toast.LENGTH_LONG).show()
            }
            override fun onFinish() {
                currentUser = mAuth!!.currentUser!!
                // Code for Logout
                Toast.makeText(this@MainActivity, "Finished", Toast.LENGTH_LONG).show()
                val colref = mFirestore.collection("AllUsers")
                deleteCollectiontimer(colref, EXECUTOR)
            }
        }
        override fun onResume() {
        super.onResume()
        Toast.makeText(this@MainActivity, "Timer Stopped", Toast.LENGTH_LONG).show()
        timer.cancel()
    }
    override fun onStop() {
        super.onStop()
        Toast.makeText(this@MainActivity, "Timer Started", Toast.LENGTH_LONG).show()
        timer.start()
    }
        
        

Но если я добавлю приведенный выше код в каждое действие onstop () и onresume (), это неправильно. Так что я не понимаю, как выйти из системы, когда пользователь не активен вцелое приложение?

Я также читал что-то вроде ProcessLifecycleowner, но не совсем понял, как его использовать, так может ли это помочь мне в этом случае, если да, то как?

Есть ликонкретный метод жизненного цикла или прямой код, который позаботится о бездействии всего приложения?

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019

Вот пример, который вы можете попробовать на уровне приложения.

  public class App extends Application {

    private Handler handler;

    @Override
    public void onCreate() {
        super.onCreate();
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityStarted(Activity activity) {

            }

            @Override
            public void onActivityResumed(Activity activity) {

            }

            @Override
            public void onActivityPaused(Activity activity) {

            }

            @Override
            public void onActivityStopped(Activity activity) {
                startTrackingPauseTime();
            }

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {

            }

            @Override
            public void onActivityDestroyed(Activity activity) {

            }
        });
    }

    private void startTrackingPauseTime() {
        if (handler != null) return;
        handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                //some action to logout user
            }
        }, 1000 * 60 * 5);
    }
}

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

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

0 голосов
/ 23 апреля 2019

Все просто, создайте пользовательское действие, называемое BaseActivity, и поместите в него свой код, а затем добавьте его во все ваши действия. Не забудьте переопределить метод onResume & onStop ...

Но вышеприведенное решение лучше всего дать Викасу Кумару ...

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