广播接收器调用两次EXTRA_STATE_RINGING状态,导致不变数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了广播接收器调用两次EXTRA_STATE_RINGING状态,导致不变数据相关的知识,希望对你有一定的参考价值。
我打算在通话时保存通话详情,所以我实现了一个收听PHONE STATE的广播接收器。调用问题出现时,它进入EXTRA_STATE_RINGING两次我执行逻辑,所以我的逻辑调用了两次导致不变数据。
private static final String ACTION_IN = "android.intent.action.PHONE_STATE";
下面是BroadCastReceiver的onReceieve()的代码
public void onReceive(Context context, Intent intent) {
ctx = context;
if (intent.getAction().equals(ACTION_IN)) {
Log.v("onReceive", "ACTION IN");
if ((bundle = intent.getExtras()) != null) {
Log.v("onReceive", "Bundle != NULL");
state = bundle.getString(TelephonyManager.EXTRA_STATE);
Log.v("onReceive", "state: "+state);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
//businesslogic
}
}
}
}
我在清单中有以下许可
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
我的接收器在清单中定义为此
<receiver android:name="IncomingCallInterceptor" >
<intent-filter android:priority="999">
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver>
答案
试试这个,它没有在EXTRA_STATE_RINGING上实现业务逻辑,它只在用户断开调用(CALL_STATE_IDLE)后设置。
public void onReceive(Context context, Intent intent) {
ctx = context;
if (intent.getAction().equals(ACTION_IN)) {
Log.v("onReceive", "ACTION IN");
if ((bundle = intent.getExtras()) != null) {
Log.v("onReceive", "Bundle != NULL");
state = bundle.getString(TelephonyManager.EXTRA_STATE);
Boolean singlecallstate=false;
switch (state) {
case TelephonyManager.EXTRA_STATE_RINGING:
singlecallstate=true;
//any other code you want
case TelephonyManager.CALL_STATE_IDLE:
if(singlecallstate){
//business logic
singlecallstate=false;
}
}
}
}
以上是关于广播接收器调用两次EXTRA_STATE_RINGING状态,导致不变数据的主要内容,如果未能解决你的问题,请参考以下文章