如何在Android系统锁屏后使程序继续运行?

 

转载请注明原文地址:http://bcoder.com/java/make-the-app-keep-running-after-lock-screen

话不多说,先上代码:

首先在AndroidManifest.xml中申请WakeLock权限


然后在你需要保持系统一直运行的地方写下面的代码:

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 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服务,在手机锁屏休眠后,服务也可能会停止运行,我们可以使用此方法让服务保持运行,但代码写法和上面稍有不同。如下:

public class MyService extends Service {

1public class MyService extends Service {

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();

}

}

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();

}

}

你可能感兴趣的:(如何在Android系统锁屏后使程序继续运行?)