Android - 删除未接来电通知

时间:2011-10-12 07:29:27

标签: android telephony

无论如何都要通过代码删除未接来电通知?并以某种方式删除呼叫历史记录中的最后一个未接来电?

3 个答案:

答案 0 :(得分:3)

是的,这是可能的。试试这个:

Uri UriCalls = Uri.parse("content://call_log/calls");
Cursor cursor = getApplicationContext().getContentResolver().query(UriCalls, null, null, null, null);

阅读通话记录条目......

if(cursor.getCount() > 0){
    cursor.moveToFirst();
    while(!cursor.isAfterLast()){
        String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)); // for  number
        String name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME));// for name
        String duration = cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION));// for duration
        int type = Integer.parseInt(cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE)));// for call type, Incoming or out going
        cursor.moveToNext();
    }
}

删除通话记录中的条目...

String queryString= "NUMBER='" + number + "'";
if (cursor.getCount() > 0){
        getApplicationContext().getContentResolver().delete(UriCalls, queryString, null);
}

许可:

<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

注意:请参阅此doc通过通话记录以获得更明确的信息。

使用上面的代码,您可以获得所需的结果。

答案 1 :(得分:1)

参考this 您可以拨打cancel(ID)calcelAll()清除通知栏,以清除未接来电。

答案 2 :(得分:-1)

对于要从日志中删除最后一个调用的部分,您需要将删除该条目的方法移动到一个类,该类是Thread类的子类。这允许您将其设置为休眠一小段时间,以允许Android在您运行删除查询之前实际写入呼叫日志。我遇到了同样的问题,但设法用以下代码解决它:

public class DelayClearCallLog extends Thread {

    public Context context;
    public String phoneNumber;

     public DelayClearCallLog(Context ctx, String pNumber){

            context = ctx;
            phoneNumber = pNumber;
        }

     public void run() {
         try {
             sleep(2000);
         } catch (InterruptedException e) {
             e.printStackTrace();
         }

         clearCallLog(context, phoneNumber);
     } 
 public void clearCallLog(Context context, String phoneNumber) {
         // implement delete query here
     }
}

然后按如下方式调用方法:

DelayClearCallLog DelayClear = new DelayClearCallLog(context, phoneNumber);
DelayClear.start();