我正在使用广播接收器接收phone_states并检查任何呼叫(出/出)正在将状态更改为EXTRA_STATE_IDLE
,然后从呼叫记录中删除呼叫信息。
据我所知,android手机的状态是:
EXTRA_STATE_RINGING
EXTRA_STATE_OFFHOOK
EXTRA_STATE_IDLE
这是我知道的来电:
EXTRA_STATE_RINGING
=> EXTRA_STATE_OFFHOOK
(接听电话后)=> EXTRA_STATE_IDLE
(结束通话后)EXTRA_STATE_RINGING
=> EXTRA_STATE_IDLE
(结束通话后)所以,当电话状态在EXTRA_STATE_IDLE
时,实际上我正在清除通话记录历史记录。但是在这个策略中,我能够清除2.场景的日志历史,但不能用于1.场景。
这是我的代码::
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
Toast.makeText(context, "ringing", 20).show();
SharedPreferences statePreference=context.getApplicationContext().getSharedPreferences("RingCallState", 0);
SharedPreferences.Editor editor=statePreference.edit();
editor.putBoolean("State", true);
editor.commit();
context.startActivity(i);
}
else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
Toast.makeText(context, "off hook", 20).show();
SharedPreferences statePreference=context.getApplicationContext().getSharedPreferences("RingCallState", 0);
Log.d("statePref OFFHOOK", "state :: "+statePreference.getBoolean("State", false));
if(!statePreference.getBoolean("State", false)) {
SharedPreferences out_statePreference=context.getApplicationContext().getSharedPreferences("OutCallState", 0);
SharedPreferences.Editor out_editor=out_statePreference.edit();
out_editor.putBoolean("OutState", true);
out_editor.commit();
}
}
else if(state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
Toast.makeText(context, "idle", 20).show();
SharedPreferences statePreference=context.getApplicationContext().getSharedPreferences("RingCallState", 0);
Log.d("statePref IDLE", "state :: "+statePreference.getBoolean("State", false));
if(statePreference.getBoolean("State", false))
{
SharedPreferences.Editor editor=statePreference.edit();
editor.putBoolean("State", false);
editor.commit();
Log.d("in", "in coming :: "+incomingNumber);
new Handler().postDelayed(new Runnable() {
public void run() {
clearLastCallLog(context, incomingNumber);
}
}, 4000);
}
SharedPreferences out_statePreference=context.getApplicationContext().getSharedPreferences("OutCallState", 0);
if(out_statePreference.getBoolean("OutState", false))
{
SharedPreferences.Editor out_editor=out_statePreference.edit();
out_editor.putBoolean("OutState", false);
out_editor.commit();
Log.d("out", "out going :: "+outgoingNumber);
new Handler().postDelayed(new Runnable() {
public void run() {
clearLastCallLog(context, outgoingNumber);
}
}, 4000);
}
}
我错过了什么......任何人都可以解释是否有任何事情可以处理接听来电? 有任何建议请...
答案 0 :(得分:0)
一旦呼叫振铃,你可以将状态(int值)维持为呼叫状态(RINGING)使其成为1,如果呼叫被应答(OFFHOOK)使其成为2,如果呼叫结束(IDLE)使其成为现在,只要其中任何一个案例触发检查最后一个呼叫状态,这样就可以轻松跟踪你的2个场景。请记住,一旦任何呼叫结束并且您已完成,请将呼叫状态重置为0。
答案 1 :(得分:0)
这是一种黑客行为,我以前没试过,但你可以尝试一下。
让我们拿变量:
boolean isIdle=true;
boolean isOffhook=false;
现在,当你进入手机处于“摘机状态”的情况时:
有:
if(isIdle==true)
isIdle=false;
isOffhook=true;
现在,手机状态为“空闲”:
在开头添加这些代码:
if(isIdle==false && isOffhook==true){
// case :there has been a call
String lastCall=<get the type of call of last call,from call log of phone>; //incoming or outgoing
if(lastCall=="incoming"){
// last call was answered incoming call
}
isOffhook=false;
}
isIdle=true;
答案 2 :(得分:0)
解决了它。虽然已经晚了,但它可以帮到任何人。问题是,每次更改手机状态时都会调用BroadcastReceiver
onReceive(Context context, Intent intent)
,但意图会为EXTRA_STATE_RINGING
,EXTRA_STATE_IDLE but not for EXTRA_STATE_OFFHOOK
提供传入号码。因此,当收到呼叫时,来电号码变为空。