Android服务中如何知道屏幕何时被锁定?

时间:2017-06-06 10:42:58

标签: android service background screen-off

我想在后台处理Androids应用程序工作。我已经读过,我必须使用服务。 在这个应用程序中,我需要知道屏幕何时被锁定以及何时再次解锁。每次发生这种情况,我都必须采取一些行动。

对于活动,我看到我们有onPause和onRestart这个,但我需要知道屏幕何时关闭以及何时在服务中打开。如何从服务内部检索此信息。

4 个答案:

答案 0 :(得分:1)

打开/关闭屏幕会产生系统事件。您必须收听这些广播并捕获它们。将此添加到您的清单:

<receiver android:name=".ScreenLockBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.USER_PRESENT" />
    <action android:name="android.intent.action.ACTION_SHUTDOWN" />
 </intent-filter>
</receiver>

然后注册广播接收器以在服务中捕获它。

public class ScreenLockBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context arg0, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)) {
            // do stuff
        }
    }
}

答案 1 :(得分:0)

您可以使用此

KeyguardManager keyguardManager = (KeyguardManager) 
context.getSystemService(Context.KEYGUARD_SERVICE);
if( keyguardManager.inKeyguardRestrictedInputMode()) {
  //it is locked
  } else {
  //it is not locked
}

希望这有帮助。

答案 2 :(得分:0)

在清单

中的接收器标记中使用此操作
 <action android:name="android.intent.action.SCREEN_ON" />
 <action android:name="android.intent.action.SCREEN_OFF" />

答案 3 :(得分:0)

  

我想在后台创建android应用程序,我读过我必须使用这些服务。

是的,可能你必须使用服务来检查屏幕是否仍然开启或关闭。例如,在onCreate类的Services中。

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver broadcast = new MyBroadcastReciverClass(); //or registerReceiver(broadcast , intentFilter );

实际上:

Intent.ACTION_SCREEN_OFF 

Intent.ACTION_SCREEN_ON

你的BroadcastReceiver中还有2件主要内容。例如,在onReceive方法中:

if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
        // CODE HERE FOR SCREEN OFF
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
        // CODE HERE FOR SCREEN ON
    }

有关更详细的说明,请参阅本文:https://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/