I am trying to delete a particular incoming number after hang up but these code not working properly

StackOverflow https://stackoverflow.com/questions/21173583

Question

I am trying to delete a particular incoming number from call log when phone hang-up. I tried as i can do but that code not working the number still remain in call log. it is working properly when broadcast invoke but this is not deleting number of incoming call. Thanks in Advance.

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;
         }
    }
}

}

Was it helpful?

Solution

Usually there is a delay between the broadcast of a phone state and the system data that is written or system activities (such as call logs or phone ringing). Right now, your receiver is probably trying to delete the call log before it is present.

You could delay the delete or take a look at this post for registering a ContentObserver:

Delete call from call log after call end

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top