Описание приложения: Приложение предназначено как программа обеспечения безопасности для конкретного клиента (не публиковаться публично). Если приложение не обнаружило движение в течение определенного периода времени, приложение должно подать сигнал тревоги и выйти на передний план, если оно находится в фоновом режиме или устройство спит.
Проблема: Если устройство спит и заблокировано, нам необходимо просыпаться и разблокировать устройство. Используя различные методы, найденные здесь в SO и других местах, мы смогли (частично) разбудить и разблокировать устройство, однако это ТОЛЬКО ведет себя правильно, когда устройство физически подключено к компьютеру. Если устройство сидит самостоятельно, отключается, и мы проверяем разблокировку после пробуждения, ничего не происходит; устройство, похоже, продолжает спать, и приложение, похоже, ничего не делает (без тревоги).
Я использовал этот пост об использовании PowerManager и KeyguardManager и этот пост, используя флаги окна.
Вот код, используемый для пробуждения устройства:
public void wakeDevice() {
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
runOnUiThread(new Runnable(){
public void run(){
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
});
}
Из комментариев и сообщений о некоторых других вопросах SO, которые я видел/использовал, кажется, что код PowerManager/KeyguardManager должен был сделать трюк. Опять же, как я уже говорил, он технически работает, когда устройство подключается через USB к машине dev, но ничего не делает, пока устройство разделено.
Также обратите внимание, что это наше первое приложение для Android, и поэтому мы полностью осознаем, что можем полностью отказаться от того, что мы пытаемся сделать. Любые предложения приветствуются.
Короче говоря, учитывая приведенный выше код, почему устройство ведет себя так по-разному, основываясь на том, подключено ли оно, и что мы должны изменить, чтобы разбудить и разблокировать устройство, как описано? Заранее благодарю вас за помощь!