开发者社区> 问答> 正文

关于 Android 手机状态的 Broadcaster Receiver报错 

再来一个 Android 的问题,之前的问题多谢鉴客很及时的解答。 我使用 Broadcaster Receiver 来捕获手机电话状态的改变,当第一次状态更改(STATE_OFFHOOK)时工作得挺好,但在呼叫结束时无动作,下面是我的代码:

String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(state)) {working fine} else if (TelephonyManager.EXTRA_STATE_IDLE.equals(state)) {doesn't react}

展开
收起
kun坤 2020-06-03 09:46:36 574 0
1 条回答
写回答
取消 提交回答
  • 当你没有任何电话是,状态是 IDLE ,当接到电话时是 OFFHOOK ,电话结束后返回 IDLE 状态。 下面是具体的处理代码:

    @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber);

    switch (state) { case TelephonyManager.CALL_STATE_IDLE: // Toast.makeText(context, "Idle", Toast.LENGTH_LONG).show(); if(UDF.phoneState != TelephonyManager.CALL_STATE_IDLE) { //Here you are came from offhook because value of UDF.phoneState != TelephonyManager.CALL_STATE_IDLE //IDLE is calls many times so you have to keep track by a static variable like UDF.phoneState } break; case TelephonyManager.CALL_STATE_OFFHOOK: //Toast.makeText(context, "Idle", Toast.LENGTH_LONG).show(); break; case TelephonyManager.CALL_STATE_RINGING: //Toast.makeText(context, "Idle", Toast.LENGTH_LONG).show(); endCallIfBlocked(incomingNumber); break;

    default:
    break;
    

    } UDF.phoneState = state; }

    2020-06-03 09:46:43
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载