在Android中的自定义系统服务中,唤醒锁定无法正常工作

时间:2012-02-02 06:39:51

标签: android android-source

我已创建自定义系统服务,该服务由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

2 个答案:

答案 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?