ブロードキャスト レシーバーを使用して 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);
}
}
私は何を見逃しています...誰かが応答した着信コールを処理するために何かすべきことがあると説明できますか?? 何か提案をお願いします...