ContentProvider中央檔案館,以及獲取聯繫人電話的示例

来源:http://www.cnblogs.com/his365/archive/2016/11/15/6066333.html
-Advertisement-
Play Games

Android官方文檔介紹的數據存儲方式共有五種,sqlite,SharedPreferences,網路存儲,外儲存儲,文件存儲,但是這些數據都無法進行共用,那麼我們就引入了今天的主角:ContentProvider // 通過隱式意圖打開通訊錄 Intent intent =newIntent(I ...


Android官方文檔介紹的數據存儲方式共有五種,sqlite,SharedPreferences,網路存儲,外儲存儲,文件存儲,但是這些數據都無法進行共用,那麼我們就引入了今天的主角:ContentProvider
  1. ContentProvider:為我們的應用程式之間提供了共用數據的一種機制,比如獲取手機裡面的通話記錄,通訊錄,多媒體,圖片等;
  2. ContentProvider為數據的存儲和獲取數據提供了統一的數據介面,它對數據進行了封裝,我們不用關心數據存儲的細節;
  3. 使用ContentProvider可以在不同的應用程式之間共用數據;
  4. 每一個ContentProvider都擁有一個公共的URI,這個URI用於表示這個ContentProvider所提供的數據;
  5. Android為我們提供的ContentProvider,都存放在android.provider包中;
  6. URI介紹
    1. 概念就是為系統的每一個資源給一個名字,比如通話記錄;
    2. 每一個ContentProvider都有一個公共的URI,這個URI用於表示這個ContentProvider所提供的的數據;
    3. 每個URI包含四部分
      1. 首碼:比如content://
      2. 標識:用於表示唯一性,外部通過這個標識找到它,一般為該ContentProvider的包+類的名稱;
      3. 路徑:就是你要操作數據中表的名字
      4. 如果URI中捕獲的記錄包含該ID,就返回該ID對應的數據,如果沒有ID,就返回全部.比如路徑可以定義為:
        1. /person/10:返回person表中id為10的記錄;
        2. /person/10/name:id為10的記錄的name欄位;
  7. ContentResolver操作ContentProvider中的數據;可以使用Activity提供的getContentResolver()方法;它有四個相同簽名的方法insert,update,delete,query
  8. 獲取聯繫人信息
    1. // 通過隱式意圖打開通訊錄
    2. Intent intent =newIntent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
    3. startActivityForResult(intent,1001);
    1. // 獲取選擇後的返回結果
    2. @Override
    3. protectedvoid onActivityResult(int requestCode,int resultCode,Intent data){
    4. super.onActivityResult(requestCode, resultCode, data);
    5. if(requestCode ==1001){
    6. if(resultCode == RESULT_OK){
    7. ContentResolver resolver = getContentResolver();
    8. Uri uri = data.getData();
    9. //uri = content://com.android.contacts/contacts/lookup/0r5-D9ADC7B9BBC9C7B9DBBDADC9/5
    10. Cursor cursor = resolver.query(uri,null,null,null,
    11. null);
    12. if(cursor.moveToFirst()){
    13. for(int i =0; i < cursor.getColumnCount(); i++){
    14. Log.i("-->", cursor.getColumnNames()[i]+":"+ cursor.getString(i));
    15. }
     
    1. sort_key:wang hongxiao
    2. photo_uri:null
    3. send_to_voicemail:0
    4. contact_status:null
    5. contact_status_label:null
    6. pinned:0
    7. display_name:wang hongxiao
    8. phonebook_label_alt:H
    9. phonebook_bucket:23
    10. contact_status_res_package:null
    11. in_default_directory:1
    12. photo_id:null
    13. custom_ringtone:null
    14. _id:5
    15. times_contacted:0
    16. phonebook_label:W
    17. display_name_alt:hongxiao, wang
    18. lookup:0r5-D9ADC7B9BBC9C7B9DBBDADC9
    19. phonetic_name:null
    20. last_time_contacted:0
    21. contact_last_updated_timestamp:1477791122100
    22. has_phone_number:1
    23. in_visible_group:1
    24. display_name_source:40
    25. photo_file_id:null
    26. is_user_profile:0
    27. contact_status_ts:null
    28. sort_key_alt:hongxiao, wang
    29. phonebook_bucket_alt:8
    30. contact_presence:null
    31. starred:0
    32. photo_thumb_uri:null
    33. contact_status_icon:null
    34. contact_chat_capability:null
    35. phonetic_name_style:0
    36. name_raw_contact_id:5
    通過分析,我們可以得到我們關心的三個欄位
 



來自為知筆記(Wiz)




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們日常開發中BaseAdapter使用非常的多,大家有沒有想過,再進一步封裝,將平常使用的對象集合,利用泛型放入集合中,再也不用每次都重寫那幾個方法了,當然我也提供我的下載地址(https://github.com/androidsihai1/BaseAdapterDemo) ...
  • 上面的 IP 地址從網上百度得來的,以上地址暫時好用,強烈推薦 超級PING 獲得 IP。 ...
  • 今天是Android第一天的學習,對於學習任何一門課程時我們都要對該課程要有基本的瞭解和認識,瞭解該課程學點什麼內容,學了這門知識我門能夠做些什麼,這也是對於我們這些剛入門的學習人員來說是一個必須要弄清清楚的,那對於該門課程我們是學習的是Android那安卓到底有什麼用途呢?小編我在這裡簡述一下 第 ...
  • 一、配置jdk環境(學過java的請無視) 1.安裝jdk jdk下載地址:http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html 進去後根據自己的系統位數下載 下載完成後安 ...
  • 一、JDK(不用安裝)1.下載適合的jdk2.配置環境變數 添加一系統邊=變數 JAVA_HOME=D:\Java\jdk1.8.0_91 CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib ...
  • 1.讓其他軟體能調起自己寫的播放器 1.在功能清單文件添加下麵的意圖 2.文件或者圖片瀏覽器 //1.調起系統所有的播放-隱式意圖 Intent intent = new Intent(); intent.setDataAndType(Uri.parse("視頻播放地址"),"video/*"); ...
  • JSON常用與伺服器進行數據交互,JSON中“{}”表示JSONObject,“[]”表示JSONArray 如下json數據: 生成json數據代碼: 解析json數據代碼: ...
  • 轉自:Android View的繪製流程 寫得太好了,本來還想自己寫的,奈何肚裡墨水有限,直接轉吧。正所謂前人種樹,後人乘涼。。 View的繪製和事件處理是兩個重要的主題,上一篇《圖解 Android事件分發機制》已經把事件的分發機制講得比較詳細了,這一篇是針對View的繪製,View的繪製如果你有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...