Эй, мне нужно разбудить мое спящее устройство Android в определенное время. Любые предложения?Wake Android Device
P.S. Проснитесь: включите дисплей и, возможно, разблокируйте телефон
Эй, мне нужно разбудить мое спящее устройство Android в определенное время. Любые предложения?Wake Android Device
P.S. Проснитесь: включите дисплей и, возможно, разблокируйте телефон
Лучше всего использовать подходящую комбинацию этих флагов окна:
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_DISMISS_KEYGUARD
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_SHOW_WHEN_LOCKED
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_TURN_SCREEN_ON
Если вы хотите работать на старых версиях платформы, которые не поддерживают нужный флаг (ы), вы можете напрямую использовать блокировки от бодрствования и блокировки блокировки клавиатуры ... но этот путь чреват опасностью.
ONE ВАЖНО: Ваша деятельность должен быть полный экран для того, чтобы указанное сочетание флаг работать. В моем приложении я попытался использовать эти флаги с активностью, которая не является полноэкранной (Dialog Theme), и это не сработало. Посмотрев документацию, я обнаружил, что эти флаги требуют, чтобы окно было полноэкранным окном.
Урегулирование тревоги программно пробудит телефон (воспроизведет звук), и я думаю, что поворот на дисплее будет вариантом.
Я не думаю, что был бы открытый API, который автоматически разблокирует телефон.
Если что-то будет зависеть от вашего вида активности, и как только вы выйдете из него, будет заблокирован экран. Например, когда вы находитесь в фонотеке. – schwiz
Я нашел способ, и это не так сложно ... работает над любой версией API.
Вы должны использовать PowerManager.userActivity(l, false)
метод и зарегистрировать вашу деятельность в качестве широковещательного, полученные за SCREEN_OFF намерения:
В вашем actiivity OnCreate поставить что-то вроде:
mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "Screen OFF onReceive()");
screenOFFHandler.sendEmptyMessageDelayed(0, 2000L);
}
};
Это пнет обработчик через 2 секунды Выключить экран.
Регистрация приемника в методе onResume():
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
registerReceiver(mReceiver, filter);
Log.i(TAG, "broadcast receiver registered!");
Создайте обработчик, как показано ниже:
private Handler screenOFFHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
// do something
// wake up phone
Log.i(TAG, "ake up the phone and disable keyguard");
PowerManager powerManager = (PowerManager) YourActivityName.this
.getSystemService(Context.POWER_SERVICE);
long l = SystemClock.uptimeMillis();
powerManager.userActivity(l, false);//false will bring the screen back as bright as it was, true - will dim it
}
};
разрешения запроса в вашем файле манифеста:
<uses-permission android:name="android.permission.WAKE_LOCK" />
Do не забудьте отменить регистрацию вещательного приемника, когда вы закончите.Вы можете сделать это в OnDestroy(), например (не гарантировано)
unregisterReceiver(mReceiver);
Log.i(TAG, "broadcast UNregistred!");
По какой-то причине я могу заставить код работать. Я пытаюсь, чтобы служба разблокировала экран, но по какой-то причине он не разблокируется. Должен ли код просыпаться и разблокировать телефон через 2 секунды? Используя код выше, телефон просто блокируется после того, как я заблокирую его. – Nick
Проблема происходит после блокировки телефона. Экран OFF Log.V показывает, а затем говорит о сдаче экрана -> Просыпайтесь по телефону и отключите клавиатуру. Затем он сидит около 30 секунд, а затем говорит: «Close() никогда не вызывалось явным образом в базе данных» – Nick
Я получаю 'Unresolved reference: userActivity' – crgarridos
Проснуться экран:
PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
WakeLock wakeLock = pm.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "TAG");
wakeLock.acquire();
Чтобы снять блокировку экрана:
KeyguardManager keyguardManager = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE);
KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("TAG");
keyguardLock.disableKeyguard();
И манифест должен содержать:
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
Для получения дополнительной информации о PowerManager см. Документацию API: http://developer.android.com/reference/android/os/PowerManager.html
EDIT: этот ответ сообщается как устаревший.
Просьба предложить, где добавить этот код. –
Верхние 2 блока кода переходят в onCreate() Activity. Нижний блок кода, очевидно, переходит к манифесту Android. – Yar
Спасибо Яру. Эти работы отлично. –
getWindow().addFlags(LayoutParams.FLAG_DISMISS_KEYGUARD);
уволит общую блокировку клавиатуры и привести устройство для разблокировки.
Если вы видите окно при пробуждении, вы можете легко его легко найти, добавив несколько флагов в свою деятельность, не используя блокировку слежения.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
У вас есть мысли об альтернативном пути? – Coxer
API-интерфейс KeyguardManager и PowerManager для непосредственного управления ими. Но очень сложно использовать их ... на самом деле, я бы сказал, что их невозможно использовать для такого рода вещей. Это одна из причин, по которой были введены флаги. – hackbod
Это не работает для меня. Я добавил эти флаги в onCreate своей деятельности, вызываемой моим BroadcastReceiver, в свою очередь, вызванным AlarmService. Вызывается код, но экран остается черным. – Yar