1. 程式人生 > >操作Android中聯絡人,通話記錄,短息,的URI,和具體的查詢語句,欄位註解。(根據自己需求)

操作Android中聯絡人,通話記錄,短息,的URI,和具體的查詢語句,欄位註解。(根據自己需求)

讀取簡訊的URI:

    /**
     * 所有的簡訊
     */  
    public static final String SMS_URI_ALL = "content://sms/";  
    /**
     * 收件箱簡訊
     */  
    public static final String SMS_URI_INBOX = "content://sms/inbox";  
    /**
     * 發件箱簡訊
     */  
    public static final String SMS_URI_SEND = "content://sms/sent";  
    /**
     * 草稿箱簡訊
     */  
    public static final String SMS_URI_DRAFT = "content://sms/draft";  
   

    /**
     *會話的URI        
     */
    public static final String THREAD_URI = "content://mms-sms/conversations"
    /**
     *所有簡訊的URI        
     */     
    public static final String SMS_URI = "content://sms"
        


讀取會話列表獲取最後一條簡訊息有(根據自己需求):

欄位名稱:body,該欄位是簡訊內容
欄位名稱:person,該欄位的值是:null(代表會話中最後一條簡訊的發信人 是我或者陌生人取值null,如果是通訊錄中有的人,值就是contacts表中該聯絡人的id)
欄位名稱:type,該欄位的值是:2 (type 1 收簡訊 2發出簡訊)
欄位名稱:date,該欄位的值是:1462352825441
欄位名稱:_id,該欄位的值是:5 (該會話中最後一條簡訊在sms資料表中的id)
欄位名稱:read,該欄位的值是:1 (1 已讀 0 未讀)
欄位名稱:thread_id,該欄位的值是:1
欄位名稱:address,該欄位的值是:1 366-136-1366(無論最後一條簡訊是誰傳送的,該欄位儲存的電話就是該會話中對方的電話)


姓名和頭像ID在threads表的contentProvider依然不能提供,需要利用電話號碼去phone_lookup表中反向查詢。

uri:PhoneLookup.CONTENT_FILTER_URI
頭像id:PhoneLookup.PHOTO_ID
姓名:PhoneLookup.DISPLAY_NAME

讀取一條會話的所有簡訊息:

     String [] projection = new String[] { "_id",  
                "body", "date", "type" };
     ContentResolver resolver = context.getContentResolver();
        
     Cursor cursor = resolver.query(uri, projection, "thread_id = "+thread_id, null, "date asc");


欄位名稱:body,:該欄位是簡訊內容
欄位名稱:type, 該欄位是簡訊型別(type 1 收簡訊 2發出簡訊)
欄位名稱:date,:該欄位是簡訊時間戳
欄位名稱:_id,:該欄位是簡訊表中的ID
欄位名稱:thread_id,:該欄位是會話的ID

====================================================================================================================================

利用電話號碼反查頭像ID:

calls表中的photo_id列資料存在一個小問題,當對方撥打電話進來時,如果沒有接聽,則對方的頭像ID值是
不會記錄在calls表中的。此時CalllogFragment中顯示該條通話記錄的時候就不會有頭像出現。所以,需要利用
電話號碼去其它表中查詢該使用者的頭像ID。

利用電話號碼查詢頭像ID最簡單的方式就是利用phone_lookup表的

ContentProvider來進行查詢。查詢時需要注意的是,

該ContentProvider支援的Uri格式為:
Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, 電話號碼);

完整的利用電話號碼查詢頭像id的程式碼例項為:
protected static int getPhotoIdByNumber(Context context,String number) {
    int photoId = 0;
    //利用phone_lookup資料表所對應的ContentProvider進行查詢
    ContentResolver cr = context.getContentResolver();
    Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, number);
    Cursor c = cr.query(uri , new String[]{PhoneLookup.PHOTO_ID}, null, null, null);
    //如果提供的電話號碼確實是有頭像的
    if(c.moveToNext()){
        photoId = c.getInt(0);
    }
        c.close();
        return photoId;
    }

====================================================================================================================================

相關推薦

操作Android聯絡人通話記錄URI具體查詢語句註解根據自己需求

讀取簡訊的URI:     /**      * 所有的簡訊      */       public static final String SMS_URI_ALL = "content://sms/";       /**      * 收件箱簡訊      */       public sta

Android聯絡人和通話記錄詳解(聯絡人的增刪改查)3

    在上一章 Android中聯絡人和通話記錄詳解(2)中分析了聯絡人相關的表和欄位,在這一章中將分析聯絡人相關的基本資料操作(Insert,Query,Update,Delete)。    1.新增(Insert)      從contacts,data,mimety

Android聯絡人和通話記錄詳解2

  在文章Android中聯絡人和通話記錄詳解(1)中對通話記錄進行了分析,本章將對聯絡人的資料庫表、欄位以及Insert,Query,Delelte,Update四大基本資料操作進行分析。   與聯

Android 怎麼去掉聯絡人通話記錄、撥號列表介面的電話號碼中間的空格?

    FILE: PhoneNumberUtils.java      PATH: alps/frameworks/base/telephony/java/android/Telephony-----------------------------------------------------------

Android可以用隨意替換指定的View(比如在某個位置展示空頁面無網頁面之類的)

Android中要在某個地方展示空頁面,或者無網頁面,開發者一般都是直接覆蓋個頁面上去,在需要的時候顯示,不需要隱藏。這樣就擾亂了程式碼的邏輯性。今天寫了個小工具,可以隨意指定在某個View上展示空頁面。程式碼很簡單,如下,相信很快就能看明白: public class

Android聯絡人操作(讀取寫入聯絡人)

瞭解了ContentProvider之後,我們可以嘗試來操作手機中的聯絡人。 這個操作是非常常用的,那麼首先我們要了解聯絡人在手機資料庫中是如何儲存的。 聯絡人中,有三張表比較關鍵raw_contact,data.minetype. 下面的程式碼則是讀取和寫入聯絡人。

定義抽象類Shape抽象方法為showArea()求出面積並顯示定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性用showArea方法求出各自的面積在main方法構造3個對象調用showArea方法。(體現多態

子類 protected new 都是 package 使用 類指針 3.1 shape 實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象 重載重寫重定義的區別: 1.重載:在同一個類中進行;  編譯時根據參數類型和個數決定方法調用; 

怎樣從生產數據庫獲得想要的查詢語句把結果集批量插入到磁盤txt文件

txt第一步:建立存儲過程 實現傳入參數,生成結果到磁盤的txt文件中;USE [XXXXX]GO/****** Object: StoredProcedure [dbo].[Proc_sql_to_file] Script Date: 2018/5/13 15:47:10 ******/S

MySQL、SQL server 、Oracle資料庫查詢所有的資料庫查詢指定資料庫所有表名查詢所有的的名字

MySQL中查詢所有資料庫名和表名 1.查詢所有資料庫 show databases; 2.查詢指定資料庫中所有表名 select table_name from information_schema.tables where table_schema='database_name' a

idea ssm專案出現日誌中文亂碼封裝的json的msg中文亂碼但是json封裝的bean不亂碼等其他各種專案下的中文亂碼解決方案

   開頭劃重點!(敲黑板):rebuild和mvn package的迴圈往復好幾次的操作是解決這個問題的最主要的方法! 經過多次試驗,發現這樣做就可以正常顯示中文了 我說為什麼有時候亂碼,有時候中文正常,原來下面的這些地方都必須設定好,特別是 rebuild和m

記錄一次失敗的向git提交程式碼解決的方法首次建立倉庫

背景: 向git push程式碼(建立一個新的倉庫) 做法: 在github建立一個新的倉庫------>本地新建資料夾------->依次執行了下面的命令 git init git clone git checkout -b master

IntelliJ IDEA 右鍵新建new選項沒有scala(java) class的解決方法具體解釋

首先註明:本文不是原創,我也是在網上找了好久,找到這篇博文(連結),解決了我的問題,順便在這裡總結一下,給有需要的人。 專案是用Maven 建立的,具體的建立過程就不做解釋了。出現的問題如下:  具體問題的圖,如下: 開啟設定介面的路徑如下: 主介面File——&

在資料庫查詢多個的時候不能用物件接受

今天在做查詢從資料庫中查詢兩個欄位的問題的時候不知道是應該用物件接受,還是集合接受,開始的時候用物件接受 service層介面: User userUpdateByAccount(@Param("account") String account, @Param("phone") String phone)

需求:MYSQL表一個用逗號分隔需要查出來split拆分並依次存入另一個表的一個

 需求:表中一個欄位用逗號分隔,需要查出來split拆分並依次存入另一個表的一個欄位中 假設問題是這丫那個的,table1中id=2的name值為'xiaoming,xiaohua,xiaowang,xiaohui',我們要取出這個name欄位值,並且根據逗號拆分出來,

hdu 1385 spfafloyddijkstra記錄最小字典序的路徑

/* spfa記錄字典序最小的路徑 */ #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define inf 0x3fffffff #

MySQLgroup_concat函式用符號連線查詢分組裡

MySQL中group_concat函式 完整的語法如下: group_concat([DISTINCT] 要連線的欄位 [Order BY ASC/DESC 排序欄位] [Separator '分隔符']) 基本查詢 mysql> select * from aa;

SQL查詢有很多就不想要其中一個的方法

在sql查詢中 通常選取欄位都是select 欄位1,欄位2,欄位3....... from 表, 如果有很多欄位,就不想要其中一個 有沒有方法能 select 非(欄位1) from 表 查到其他欄位的內容呢 把欄位1去掉declare @s nvarchar(10

android聯絡人搜尋框

在開發中經常用到獲取聯絡人和搜尋框,今天總結一下。 執行效果圖: 1、在Activity中做呼叫,得到聯絡人,對EditText設定監聽。 public class MainActivity extends Activity imple

SQLwhere in的用法以及mybatis執行查詢語句可以在plsql查詢資料但是在程式查詢不到

首先我們要知道where是什麼:一個判斷符。在SQL操作中,控制只選擇指定的行。 in的其實歸類於特殊的比較運算子 expr1 between expr2 and expr3:表示expr1的值在expr2和expr3之間 expr in(expr2,expr3,expr4,

Android 跳轉到通話記錄詳情頁

Intent showCallLog = new Intent(); showCallLog.setAction(Intent.ACTION_VIEW); Uri u