1. 程式人生 > >Android——查詢通話記錄和刪除記錄

Android——查詢通話記錄和刪除記錄

------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------   負責存放呼叫記錄的內容提供者原始碼在 ContactsProvider 專案下:
       原始碼路徑:
       com/android/providers/contacts/CallLogProvider.java
      
       使用到的資料庫在:
       /data/data/com.android.providers.contacts/databases/contacts2.db
       表名:calls
      
       呼叫記錄有三種類型:
       來電:CallLog.Calls.INCOMING_TYPE (常量值:1)
       已撥:CallLog.Calls.OUTGOING_TYPE(常量值:2)
       未接:CallLog.Calls.MISSED_TYPE(常量值:3)
      
       檢視原始碼中的宣告:
              <provider android:name="CallLogProvider"
                   android:authorities="call_log"
                   android:syncable="false" android:multiprocess="false"
                   android:readPermission="android.permission.READ_CONTACTS"
                   android:writePermission="android.permission.WRITE_CONTACTS">
               </provider>
3.需要宣告的許可權
    <uses-permission android:name="android.permission.READ_CALL_LOG"/>
    <uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
 
4. 系統的通話記錄,是通過 ContentProvider 來對外共享的
 
5. Uri
       CallLog.Calls.CONTENT_URI : 等價於:Uri.parse("content://call_log/calls");
6. 查詢出所有記錄
       ContentResolver resolver = getContentResolver();
       resolver.query(CallLog.Calls.CONTENT_URI, null, null, new String[]{"15101689022"}, null);
      
7. 查詢某一個聯絡人的所有記錄(按電話號碼)
       resolver.query(CallLog.Calls.CONTENT_URI, null, "number=?", new String[]{"15101689022"}, null);
 
8. 查詢某一個聯絡人的所有未接電話記錄(按電話號碼)
       resolver.query(CallLog.Calls.CONTENT_URI, null, "number=? and type=3", new String[]{"15101689022"}, null);
8. 刪除某聯絡人最近的一次來電


/* 本程式碼因為在 Activity 中,所以可以直接呼叫 getContentResolver()。這個方法實際上是 Context 中定義的。 */  
ContentResolver resolver = getContentResolver();  
/* 這裡涉及到內容提供者的知識,其實這裡是直接在操作 Android 的資料庫,十分痛苦 */  
Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, new String[]{"_id"}, "number=? and (type=1 or type=3)",  new String[]{"15101689022"},  "_id desc limit 1");  
if(cursor.moveToFirst()) {  
    int id = cursor.getInt(0);  
    resolver.delete(CallLog.Calls.CONTENT_URI, "_id=?", new String[] {id + ""});  
}