0

所以我正在制作一个应用程序来监听 Android 中的 Screen On 活动。我有一个接收Intent.ACTION_SCREEN_ON. 然后这个接收器开始一个活动。

一切正常,但即使屏幕因来电而打开,它也会启动活动。

这是我的代码。

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
    Intent i = new Intent(context, MainScreenActivity.class);
    i.putExtras(intent);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(i);

    Log.e("receiver", "throwing in the lock screen");
}

我不太确定如何检查手机的当前状态。我有阅读权限,PHONE_STATE但我如何确定是否因为通话而触发了动作场景?

当屏幕实际打开并显示活动时,也会有延迟。默认锁定屏幕会显示一小段时间,然后会出现自定义锁定屏幕。有什么办法可以避免这种延迟吗?

4

1 回答 1

1

注册另一个响应呼叫传入状态的广播接收器设置一个标志,您可以在接收器中检查 Intent.ACTION_SCREEN_ON) 如果标志已经设置然后跳到开始活动并重置标志,否则开始活动,如

if(action.equalsIgnoreCase("android.intent.action.PHONE_STATE"))
{
    if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
                              TelephonyManager.EXTRA_STATE_RINGING)) 
{
    incomingcall = true;
}
}

并检查

if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)){
if(incomingcall ==true)
{
    //skip the reciver and reset flag incomingcall = false;
}
else{
Intent i = new Intent(context, MainScreenActivity.class);
i.putExtras(intent);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);

Log.e("receiver", "throwing in the lock screen");
}
}

有关订购广播的更多信息 http://android-developers.blogspot.in/2011/01/processing-ordered-broadcasts.html

于 2013-08-22T18:00:24.960 回答