我正在研究一个可听周围声音并执行命令的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_LOCKFULL_WAKE_LOCKdeprecated
使用AsyncTask和sleep似乎是一种以非阻塞方式打开屏幕的不好的解决方案。


我想知道是否存在更优雅的方式。有什么建议么?

最佳答案

启动一项活动,仅在onCreate()下打开屏幕。

请参阅what is the proper, non-deprecated way to wake up the device?上的讨论

10-08 16:34