gpt4 book ai didi

android - 广播接收器调用两次 EXTRA_STATE_RINGING 状态导致数据不变

转载 作者:太空宇宙 更新时间:2023-11-03 10:46:07 25 4
gpt4 key购买 nike

我试图在来电时保存通话详细信息,因此我实现了一个收听电话状态的广播接收器。当调用到来时,问题就来了,它进入 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
}
}

}
}

我在 list 中有以下权限

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  

我的接收者在 list 中是这样定义的

<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;
}
}
}
}

关于android - 广播接收器调用两次 EXTRA_STATE_RINGING 状态导致数据不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23425417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com