Android——查詢通話記錄和刪除記錄
阿新 • • 發佈:2019-02-14
------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 + ""});
}
原始碼路徑:
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 + ""});
}