我试图在挂断后删除特定的传入号码,但这些代码无法正常工作

时间:2014-01-16 21:47:20

标签: android broadcastreceiver calllog

我正在尝试在电话挂断时从通话记录中删除特定的来电号码。我试着尽我所能,但那个不工作的代码仍然保留在通话记录中。 广播调用时它正常工作,但这不是删除来电号码。 在此先感谢。

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 个答案:

答案 0 :(得分:1)

通常,电话状态的广播与写入的系统数据或系统活动(例如通话记录或电话响铃)之间存在延迟。现在,您的接收方可能会尝试在呼叫日志出现之前将其删除。

您可以延迟删除或查看此帖子以注册ContentObserver:

Delete call from call log after call end