1. 程式人生 > >Android 應用程式之間資料共享

Android 應用程式之間資料共享

  如何將應用程式的資料暴露出去? Android提供了ContentProvider,一個程式可以通過實現一個Content provider的抽象介面將自己的資料完全暴露出去,而且Content providers是以類似資料庫中表的方式將資料暴露。Content providers儲存和檢索資料,通過它可以讓所有的應用程式訪問到,這也是應用程式之間唯一共享資料的方法。要想使應用程式的資料公開化,可通過2種方法:建立一個屬於你自己的Content provider或者將你的資料新增到一個已經存在的Content provider中,前提是有相同資料型別並且有寫入Content provider的許可權。

  如何通過一套標準及統一的介面獲取其他應用程式暴露的資料?Android提供了ContentResolver,外界的程式可以通過ContentResolver介面訪問ContentProvider提供的資料。

  當前篇主要說明,如何獲取其它應用程式共享的資料,比如獲取Android 手機電話薄中的資訊。

  什麼是URI?

  將其分為A,B,C,D 4個部分:
  A:標準字首,用來說明一個Content Provider控制這些資料,無法改變的;
  B:URI的標識,它定義了是哪個Content Provider提供這些資料。對於第三方應用程式,為了保證URI標識的唯一性,它必須是一個完整的、小寫的   類名。這個標識在<provider> 元素的 authorities屬性中說明:
  <provider name=”.TransportationProvider”  authorities=”com.example.transportationprovider”  . . .  >
  C:路徑,Content Provider使用這些路徑來確定當前需要生什麼型別的資料,URI中可能不包括路徑,也可能包括多個;
  D:如果URI中包含,表示需要獲取的記錄的ID;如果沒有ID,就表示返回全部;
  由於URI通常比較長,而且有時候容易出錯,切難以理解。所以,在Android當中定義了一些輔助類,並且定義了一些常量來代替這些長字串,例如:People.CONTENT_URI

  ContentResolver 介紹說明

  看完這些介紹,大家一定就明白了,ContentResolver是通過URI來查詢ContentProvider中提供的資料。除了URI以外,還必須知道需要獲取的資料段的名稱,以及此資料段的資料型別。如果你需要獲取一個特定的記錄,你就必須知道當前記錄的ID,也就是URI中D部分。

  前面也提到了Content providers是以類似資料庫中表的方式將資料暴露出去,那麼ContentResolver也將採用類似資料庫的操作來從Content providers中獲取資料。現在簡要介紹ContentResolver的主要介面,如下:

  看到這裡,是否感覺與資料庫的操作基本一樣的?就是這樣的,詳細解析請參考Android SQLite解析篇中的說明,不在此詳細說明。