Android數據共享

數據共享的應用場景:
微信安裝,遍歷聯繫人的信息 --- 取出電話號碼 ---->查詢服務器的數據庫 --->是否是微信用戶
問題:
取出聯繫人的電話號碼
之前的解決方案:
1、獲取數據存儲的文件
2、根據文件創建相應的解析對象
3、讀取
存在問題:
1、權限問題 --- 可能沒有權限
2、文件存儲多樣 --- 
A.存儲格式多樣
B.存儲路徑多樣
導致的問題:數據的讀取方式也多樣化


可不可以提供一個標準的,風格統一的方式進行數據讀取,Android解決方案,通過數據共享實現
1、Android數據共享實現方案
2、數據共享模型
A.數據提供者
B.數據訪問者
C.數據提供者提供的訪問實現和標準
D.數據訪問者按照標準訪問
3、數據提供方
操作:數據操作的具體實現
配置:和Activity一樣需要配置
     android:name----對應的數據操作類
     android:authorities --- 標識
     android:exported ----- true
權限:數據不能被任意操作 ---- 限制
協議:content --------------- 默認的
   數據操作方
按照協議操作
content://uri
UriMatcher的作用
A.如果數據提供者存在多張表,那麼可以通過Uri添加額外信息來制定要操作的表
B.解析Uri的附加信息 --- UriMatcher作用
就是解析Uri信息的
C.根據解析的返回碼,執行相應的操作

注意:UriMatcher添加的URIS一般都以要操作的表名爲Path


Android數據共享優點:
A.風格統一,封裝性好
B.安全 --- 可以暴露非隱私信息,隱藏部分信息
  可以隱藏不必要的信息
缺點:
部分場景使用不便


4、獲取系統共享數據:

   獲取系統的數據共享協議
1、查看源碼
2、
   短信 ------
權限 --- 

   聯繫人 ---- 數據庫表結構
1、表之間的關係 --- 有關係的表四張
contacts raw_contacts data mimetype
2、視圖的作用
操作的是視圖 ------ 注意獲取數據時,使用的列名稱
3、協議 --- content://com.android.contacts;contacts
URI --- 後綴的Path是表名
聲明協議的規律
4、權限
READ
WRITE
   
數據提供者數據改變時主動告知數據改變者,主動告知數據訪問者
   監聽數據改變 --- ContentReslover
1、監聽方註冊
2、被監聽方發生改變時,喚醒監聽
思想:使用多線程的wait和notify
1、數據持有者,當數據改變時,可以通過
Context.getContentReslover().notifyChange(uri,observer);
observer 指定具體的被喚醒對象
2、數據監聽者,進行監聽註冊
Context.getContentResolver().registerContentObserver(uri,boolean,處理對象);
處理對象 ---- 在onChange中進行數據處理
boolean 值 -- 是否嚴格匹配URI
     true ---- 以指定的Uri開頭即可
      false -- 嚴格匹配
發佈了40 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章