我已创建自定义系统服务,该服务由SystemServer启动。 我想要获取唤醒锁,但它无法正常工作。我正在这项服务中执行各种任务,如启动应用程序,处理关键事件等。但它只能解锁屏幕@ Menu Button事件。是否存在与keyevents相关的内容?如果我想在启动任何应用程序时解锁屏幕,就像手机应用程序一样,那么是否需要设置特定的Intent?
这是我的代码段:
public TestService(Context context){
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,TAG);
mWorker = new WorkerThread();
mWorker.start();
}
WorkerThread extends Thread{
public void run(){
if(condition){
// It is not working.
mWakeLock.aquire();
}
}
}
请帮助解决此问题。
谢谢, Yuvi
答案 0 :(得分:0)
在我看来,你的代码是正确的。
但我认为你的案子中的问题是你试图获得非常强大的唤醒锁。这就是为什么,我猜,你的代码不起作用。尝试使用更弱的wakelock类型,例如,PARTIAL_WAKE_LOCK。
如果logcat中有任何错误,你能把它放在这里吗?
答案 1 :(得分:0)
如文档中所述,PARTIAL_WAKE_LOCK是CPU继续运行的唯一锁定,其他所有其他锁定都可以由用户进入休眠状态。
如果您持有部分唤醒锁,CPU将继续运行,无论是否有任何计时器>甚至在用户按下电源按钮之后。在所有其他唤醒锁中,CPU将运行,但是用户仍然可以使用电源按钮使设备进入睡眠状态。
http://developer.android.com/reference/android/os/PowerManager.html
只需查看上面发布的网站上的表格即可...
您还必须在文档
中声明清单中的权限任何使用WakeLock的应用程序都必须在应用程序清单的元素中请求android.permission.WAKE_LOCK权限>
http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
但为什么你会在不需要用户交互的服务上获得FULL_WAKE_LOCK?