android 回拨电话删除手机中的私人号码

以前试过使用删除最近一条通话记录,发现会把手机里面的记录也给删除,不知道是代码写的有问题还是别的原因:

ContentResolver resolver = context.getContentResolver();
        Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI,
                new String[] { "_id" }, null, null, "_id desc limit 1");
        if (cursor.moveToFirst()) {
            int id = cursor.getInt(0);
            resolver.delete(CallLog.Calls.CONTENT_URI, " _id = ? ",
                    new String[] { id + "" });
            return true;
        }

发现在使用广播监听的时候

phone_state.equals(TelephonyManager.EXTRA_STATE_IDLE)会执行两次

导致打点都没有通话记录。

最后换了一种不是很好的解决办法:

结束电话的时候去扫描通话记录,将其中的电话号码的长度小于3的记录删除

实现代码:

读取所有的通话记录(其实可以给定一个时间限制,那样会好一点)

ContentResolver resolver = context.getContentResolver();
        Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI,                            
                null, null, null, null);                                                                                                 
        if(cursor.moveToFirst()){                                                                                
            do{                                                                                                  
                String number = cursor.getString(cursor.getColumnIndex(Calls.NUMBER));
                System.out.println("电话号码:"+number);
                if(number.length()<3){
                    deleteCallLogByNumber(context, number);
                    return true;
                }
                //删除私人电话的通话记录
                
            }while(cursor.moveToNext());                                                                         
                                                                                                                 
        }                      
删除指定号码的通话记录:

public static boolean deleteCallLogByNumber(Context context,
            String phonenumber) {
        boolean ret = false;
        ContentResolver cr = context.getContentResolver();
        try {
            if (phonenumber != null && phonenumber.length() > 0) {
                int i = cr.delete(CallLog.Calls.CONTENT_URI, "number=?",
                        new String[] { phonenumber });
                Log.d("xx", "i:" + i);
                if (i > 0) {
                    ret = true;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return ret;
    }



你可能感兴趣的:(android 回拨电话删除手机中的私人号码)