设备锁定时停止服务,当设备不是

时间:2016-02-26 01:24:58

标签: android

我是Android开发中的新手。我想知道如果设备解锁后如何启动服务,如果设备未解锁则停止服务。我找到了有关使用ACTION_USER_PRESENT的信息,但是它可以正常工作,但是在我的服务启动之前,它需要锁定然后解锁。

2 个答案:

答案 0 :(得分:0)

您可以收听ACTION_SCREEN_ONACTION_SCREEN_OFF

请注意,您必须致电registerReceiver来听取这些意图。只需在AndroidManifest.xml中注册它们就行不通了。

答案 1 :(得分:0)

如果您在Manifest文件中为BroadcastReceiver声明操作,那么只有在您注册广播接收器时它才会起作用。当您的申请被关闭时,它将无法运作。所以在服务中注册接收器。

为此创建一个注册接收器的服务

public class UnlockService extends Service {

并注册该服务的SCREEN_ONSCREEN_OFF BroadcastReceiver onCreate

@Override
public void onCreate() {
    super.onCreate();
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new ScreenUnlockReceiver();
    registerReceiver(mReceiver, filter);
}

并在您必须开始检测事件的任何活动中注册该服务。

Intent service = new Intent(CurrentActivity.this, UnlockService.class);
startService(service);

它会注册BroadcastReceiver来检查SCREEN_ONSCREEN_OFF个事件。

然后声明ScreenUnlockReceiver

public class ScreenUnlockReceiver extends BroadcastReceiver {

并写入onReceive方法

@Override
public void onReceive(final Context context, Intent intent) {
    String action = intent.getAction();
    if(Intent.ACTION_SCREEN_ON.equals(action)) {
        // start the service
    } else if(Intent.ACTION_SCREEN_OFF.equals(action)) {
        // stop the service
    }
}

并完成。