【问题标题】:Android - remove missed call notificationAndroid - 删除未接来电通知
【发布时间】:2011-10-12 07:29:26
【问题描述】:

是否可以通过代码删除未接来电通知?并以某种方式从通话记录中删除最后一个未接来电?

【问题讨论】:

    标签: android telephony


    【解决方案1】:

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

    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 以获得更清晰的信息。

    使用上面的代码可以得到想要的结果。

    【讨论】:

    • 好吧,这可行,但我要删除的号码的最后一个来电会被保存。它也不会从通知栏中消失吗?有什么建议吗?
    【解决方案2】:

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

    【讨论】:

    • 但这只是你开发自己的通知吗?我要清除 Android 的未接来电通知!
    【解决方案3】:

    对于要从日志中删除最后一次调用的部分,您需要将删除条目的方法移动到作为 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      相关资源
      最近更新 更多