2013-11-23 78 views
4

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

编辑:我想知道,当用户按下任意键或做其他任何可以打开屏幕

+0

请参阅:http://stackoverflow.com/a/9478013/362298 –

+0

此操作用于检测屏幕何时开启\关我想知道用户什么时候开启屏幕 –

回答

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

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

-1

你在找这个吗?

@Override 
public void onConfigurationChanged (Configuration newConfig) 

,并把这个在您的清单中为每个活动要定向通知:

android:configChanges="orientation" > 
+0

我不想改变方向。我想知道用户什么时候按任何按钮或做任何可以打开屏幕 –

+0

哦,对不起。我误读为“转身”。 –

4

系统将会播放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 

     } 
    } 
} 

请注意,您不能自己公开这个活动。

+0

这不是我要求的 –

相关问题