2

ブロードキャスト レシーバーを使用して phone_states を受信し、すべての通話 (発信/着信) が状態に変更されていることを確認してEXTRA_STATE_IDLEから、通話ログから通話情報を削除しています。私が知っているように、Android携帯の状態は次のとおりです。

  1. EXTRA_STATE_RINGING
  2. EXTRA_STATE_OFFHOOK
  3. EXTRA_STATE_IDLE

ここに私が知っている着信コールがあります:

  1. 着信時→→ (電話応答後)→ EXTRA_STATE_RINGING(通話終了後)EXTRA_STATE_OFFHOOKEXTRA_STATE_IDLE
  2. 着信が切れたとき→→ 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);
                }

          }

私は何を見逃しています...誰かが応答した着信コールを処理するために何かすべきことがあると説明できますか?? 何か提案をお願いします...

4

3 に答える 3

0

状態 (int 値) を通話状態として保持できます。通話が鳴っている (RINGING) 場合は 1、通話に応答した場合 (OFFHOOK) は 2、通話が終了した場合 (IDLE) は 3 になります。これで、いずれかのケースが発生するたびに、最後の呼び出し状態を確認できます。このようにして、2 つのシナリオを簡単に追跡できます。通話が終了したら、通話状態を 0 にリセットすることを忘れないでください。

于 2012-09-12T07:07:04.503 に答える
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;
于 2012-09-12T07:09:58.663 に答える