如何在Android系统锁屏后使程序继续运行?
分类:Android, Java
阅读 (11,260)
Add comments
7月 232015
话不多说,先上代码:
首先在AndroidManifest.xml中申请WakeLock权限
1 |
<uses-permission android:name="android.permission.WAKE_LOCK" /> |
然后在你需要保持系统一直运行的地方写下面的代码:
1 2 3 4 5 6 |
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, CloudNoteService.class.getName()); wakeLock.acquire(); //在此执行你的代码 wakeLock.release(); wakeLock = null; |
原理:
PowerManager,手机的电源管理相关组件。 WakeLock,用于程序控制是否一直保持手机运行状态组件。WakeLock的保持运行共包括四个类型,最好使用比较低的级别,以降低手机电池的使用量。
Flag值 | CPU | 屏幕 | 键盘 |
PARTIAL_WAKE_LOCK | On* | Off | Off |
SCREEN_DIM_WAKE_LOCK | On | Dim | Off |
SCREEN_BRIGHT_WAKE_LOCK | On | Bright | Off |
FULL_WAKE_LOCK | On | Bright | Bright |
所有的类型CPU都是保持运行,屏幕和键盘分为关闭、暗光、亮光三个级别,我们经常用的应该是PARTIAL_WAKE_LOCK,保持CPU运行就行了。
在服务类中的使用
对于编写的android服务,在手机锁屏休眠后,服务也可能会停止运行,我们可以使用此方法让服务保持运行,但代码写法和上面稍有不同。如下:
1 |
public class MyService extends Service { |
http://svn1.bcoder.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
WakeLock wakeLock = null; @Override public void onCreate() { super.onCreate(); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, CloudNoteService.class.getName()); wakeLock.acquire(); } @Override public void onDestroy() { if (wakeLock != null) { wakeLock.release(); wakeLock = null; } super.onDestroy(); } } |