2011-10-12 71 views

回答

3

是的,这是possible.Try这样的:

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

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

+0

好吧,这个工作,但是从数量上一次来电我想删除获取保存。它也不会从通知栏消失吗?有什么建议么? – Carnal

+0

我确实有这个问题,并找不到如何将其从状态栏中删除... –

1

请参阅this 您可致电cancel(ID)calcelAll()清除通知栏,以清除未接来电。

+0

但是,只有当你开发自己的通知?我想清除未接来电的Android通知! – Carnal

-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();