是否可以检测用户(Android)何时打开屏幕?

时间:2013-11-23 16:47:48

标签: android android-screen android-wake-lock

我从两年前发现post有人说不能这样做。 我还发现我可以使用ACTION_USER_PRESENT来检测用户何时解锁屏幕,但是我可以检测用户何时打开屏幕(通过任何操作)?

编辑:我想知道用户何时按下任何按钮或执行任何其他可以打开屏幕的内容

3 个答案:

答案 0 :(得分:5)

系统将广播Intent.ACTION_SCREEN_ON,您可以在屏幕开启时用来捕捉事件。

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            // your code here

        }
    }
}

请注意,您无法自行播放此活动。

答案 1 :(得分:1)

我开始把它写成评论,但结果太大了。

我也找不到任何东西。您can't have a key listener on services并且您显然无法为电源按钮only for media buttons注册广播接收器。也许你可以在屏幕上的广播接收器上执行此操作并检查当前活动是哪个)? Like this,例如:

ActivityManager am = (ActivityManager) this .getSystemService(ACTIVITY_SERVICE);
List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
ComponentName componentInfo = taskInfo.get(0).topActivity;
Log.d(WebServiceHelper.TAG, "CURRENT Activity ::" + taskInfo.get(0).topActivity.getClassName()+"   Package Name :  "+ componentInfo.getPackageName());

如果您可以检测到具有焦点的活动是锁屏,则会增加成为打开他/她手机的用户的机会。也许广播接收器上的另一种方法是to detect if the phone is locked,但我想无论当前显示的活动是什么情况都会出现这种情况:

KeyguardManager km = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean locked = km.inKeyguardRestrictedInputMode();

希望这能以某种方式提供帮助。这是一个有趣的问题。

答案 2 :(得分:-1)

你在找这个吗?

@Override
public void onConfigurationChanged (Configuration newConfig)

并将其放入您希望方向通知的每个活动的清单中:

android:configChanges="orientation" >