我正在研究一个可听周围声音并执行命令的android应用。
命令之一正在唤醒屏幕。
为了实现该目标,我在服务内部使用了以下功能:
private void wakeupScreen() {
new AsyncTask<Void, Void, Exception>() {
@Override
protected Exception doInBackground(Void... params) {
try {
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock fullWakeLock = powerManager.newWakeLock((PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "Loneworker - FULL WAKE LOCK");
fullWakeLock.acquire(); // turn on
try {
Thread.sleep(10000); // turn on duration
} catch (InterruptedException e) {
e.printStackTrace();
}
fullWakeLock.release();
} catch (Exception e) {
return e;
}
return null;
}
}.execute();
}
但是,此代码存在一些问题:(它在服务上运行)
使用
SCREEN_BRIGHT_WAKE_LOCK
和FULL_WAKE_LOCK
是deprecated。使用AsyncTask和sleep似乎是一种以非阻塞方式打开屏幕的不好的解决方案。
我想知道是否存在更优雅的方式。有什么建议么?
最佳答案
启动一项活动,仅在onCreate()
下打开屏幕。
请参阅what is the proper, non-deprecated way to wake up the device?上的讨论