Я написал метод, который отключает экран блокировки Android и заставляет экран включаться из режима ожидания (для набора номера).Этот метод работает правильно в течение 30 секунд, но затем он вызывает экран ожидания, который кратковременно мигает.Это вызывает onPause, onStop, onResume.Что не должно случиться.Какой флаг не правильный?Реализация должна работать с последней версии Android до API 19.
Эта ошибка возникает только на устройствах Android <8.0. </strong>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
disableLockScreen(this)
setContentView(R.layout.activity_main)
Log.i("AppLifecycleTest", "onCreate")
}
override fun onResume() {
super.onResume()
Log.i("AppLifecycleTest", "onResume")
}
override fun onPause() {
super.onPause()
Log.i("AppLifecycleTest", "onPause")
}
override fun onStop() {
super.onStop()
Log.i("AppLifecycleTest", "onStop")
}
override fun onDestroy() {
super.onDestroy()
Log.i("AppLifecycleTest", "onDestroy")
}
@Suppress("DEPRECATION")
private fun disableLockScreen(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
activity.setShowWhenLocked(true)
activity.setTurnScreenOn(true)
}
val lock =
(activity.getSystemService(Activity.KEYGUARD_SERVICE) as KeyguardManager).newKeyguardLock(Context.KEYGUARD_SERVICE)
val powerManager = activity.getSystemService(Context.POWER_SERVICE) as PowerManager
val wake = powerManager.newWakeLock(
PowerManager.FULL_WAKE_LOCK or
PowerManager.ACQUIRE_CAUSES_WAKEUP or
PowerManager.ON_AFTER_RELEASE,
"Beterdichtbij:BusSnoozeAlarm"
)
lock.disableKeyguard()
// This timeout doesn't seem to do anything
wake.acquire(6 * 1000L)
activity.window.addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
or WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
or WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
or WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
or WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON
)
}
Условие запуска: удалить приложение из памяти изапустить, чтобы экран был активным.
LGE Nexus 5X: (Android 7.0, API 24) Ровно через 30 секунд экран быстро мигает и показывает меню режима ожидания, а кнопка переключения исчезает.Это вызывает onPause, onStop, onResume. Этого не должно быть.
2019-05-07 10:14:40.613 AppLifecycleTest: onCreate
2019-05-07 10:14:40.616 AppLifecycleTest: onResume
2019-05-07 10:15:10.851 AppLifecycleTest: onPause
2019-05-07 10:15:10.891 AppLifecycleTest: onStop
2019-05-07 10:15:10.994 AppLifecycleTest: onResume
Samsung Galaxy S8: (Android 8.0, API 26) После 30 секунд отсутствия взаимодействия с экраном кнопка переключения исчезает, но жизненные циклы приложения отсутствуютсрабатывает и не мигает быстро экран ожидания. Это правильно.
2019-05-07 10:23:22.654 AppLifecycleTest: onCreate
2019-05-07 10:23:22.717 AppLifecycleTest: onResume
Этот поток SO имеет ту же проблему, onStop срабатывает через 30 секунд.
Вот моя работа-вокруг этого, который работает, но не соответствует документации:
// add to onCreate
private fun initTimer() {
timer = Timer()
timer.schedule(25000L) {
activity.runOnUiThread {
disableLockScreen(activity)
initTimer()
Log.i("AppLifecycleTest", "reset every 25 Seconds")
}
}
}