【发布时间】:2011-10-12 07:29:26
【问题描述】:
是否可以通过代码删除未接来电通知?并以某种方式从通话记录中删除最后一个未接来电?
【问题讨论】:
是否可以通过代码删除未接来电通知?并以某种方式从通话记录中删除最后一个未接来电?
【问题讨论】:
是的,有可能。试试这个:
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 以获得更清晰的信息。
使用上面的代码可以得到想要的结果。
【讨论】:
参考this
您可以拨打cancel(ID)或calcelAll()清除未接来电,清除通知栏。
【讨论】:
对于要从日志中删除最后一次调用的部分,您需要将删除条目的方法移动到作为 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();
【讨论】: