2014-01-16 5 views
0

전화가 끊어졌을 때 통화 기록에서 특정 수신 전화 번호를 삭제하려고합니다. 내가 할 수있는 것처럼 노력했지만 번호를 작동하지 않는 코드는 여전히 통화 로그에 남아 있습니다. 브로드 캐스트가 호출 될 때 제대로 작동하지만 수신 전화 번호를 삭제하지 않습니다. 미리 감사드립니다.전화를 끊은 후 특정 수신 전화 번호를 삭제하려고하는데 이러한 코드가 제대로 작동하지 않습니다.

public class ListenPhoneState extends BroadcastReceiver { 
private boolean isPressOffHock = false; 
    static private String incomingNumberToDelete; 

@Override 
    public void onReceive(Context context, Intent intent) { 
     try { 
      // TELEPHONY MANAGER class object to register one listner 
      TelephonyManager tmgr = (TelephonyManager) context 
        .getSystemService(Context.TELEPHONY_SERVICE); 

      //Create Listner 
      MyPhoneStateListener PhoneListener = new MyPhoneStateListener(); 

      // Register listener for LISTEN_CALL_STATE 
      tmgr.listen(PhoneListener, PhoneStateListener.LISTEN_CALL_STATE);  
    } catch (Exception e) { 
     Log.e("Phone Receive Error", " " + e); 
    } 

    if(incomingNumberToDelete != null) 
    { 
     String queryString="NUMBER="+incomingNumberToDelete; 
     context.getContentResolver().delete(CallLog.Calls.CONTENT_URI,queryString,null); 
     Log.d("Delete", "Delete Number " + incomingNumberToDelete); 
    } 
} 

private class MyPhoneStateListener extends PhoneStateListener { 

    public void onCallStateChanged(int state, String incomingNumber) { 

     if(state == TelephonyManager.CALL_STATE_RINGING) 
     { 
      incomingNumberToDelete = incomingNumber; 
      Log.d("Check", "income " + incomingNumberToDelete); 
     } 


     switch(state) { 
     case TelephonyManager.CALL_STATE_IDLE: 
      //Log.d("IDLE", state + "incoming" + incomingNumber); 
      isPressOffHock = true; 
      break; 

     case TelephonyManager.CALL_STATE_RINGING: 
      //Log.d("RINGING", state + "incoming" + incomingNumber); 
      break; 


     case TelephonyManager.CALL_STATE_OFFHOOK: 
      String msg = "New Phone Call Event. Incomming Number : "+incomingNumber; 
     // Log.d("CALL_STATE_OFFHOOK",msg); 
      break; 
     } 
    } 
} 

}

답변

1

는 보통 휴대 전화 상태의 방송 및 서면 또는 (예 : 통화 기록 또는 전화 벨소리 등) 시스템 활동하는 시스템 데이터 사이에 지연이 있습니다. 지금 당장 수신자가 통화 로그가 있기 전에 삭제하려고 시도하고 있습니다.

당신은 삭제를 지연 또는 ContentObserver 등록하는이 게시물을 살펴 수 :

Delete call from call log after call end