广播接收机的多重意图

时间:2013-08-22 17:42:38

标签: android broadcastreceiver telephonymanager

所以我正在创建一个应用程序来监听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,但如何判断是否因为通话而触发了行动?

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

1 个答案:

答案 0 :(得分: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