Android中uri的組成

l_serein發表於2013-04-24

http://hi.baidu.com/xiaor186/item/7eada18f8e2dffc8b1715413


Content Provider這個東西在Android平臺上是最常用的共享資料的方法(似乎應用程式之間共享資料也只有這種方法吧,待求證)。雖然常用,但是這個東 西要理解透徹還是要先掌握一些基礎的。URI就是Content Provider(簡稱CP)的基礎。我們要標識一個CP,就必須用URI這個東東。這就類似於我們要通過網址來標識某個特定網站,實際上網址URL本身 就是一種URI。URI全稱Uniform Resource Identifier, 它包括了URL和URN。而關於它們的詳細解釋,有心的朋友可以參考RFC3896:http://tools.ietf.org/html /rfc3986。URI不僅可以標識特定CP,還可以標識CP中特定的資料庫表,就好像URL不僅可以標識特定網站,也可以標識這個網站某個特定網頁一 樣。實際上在Android平臺上URI的用途更廣泛一些,它還用於Intent中data的標識。
就Android平臺而言,URI主要分三個部分:scheme, authority and path。其中authority又分為host和port。格式如下:
scheme://host:port/path
舉個實際的例子:
content://com.example.project:200/folder/subfolder/etc
\---------/  \---------------------------/ \---/ \--------------------------/
scheme                 host               port        path
                \--------------------------------/
                          authority   

現在大家應該知道data flag中那些屬性的含義了吧,看下data flag
<data android:host="string"
      android:mimeType="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:port="string"
      android:scheme="string" />
但是我們在程式中一般是不直接用URI來標識CP的,是的,正如我們通常見到的用定義的常量來標識。例如standard CP中的Contacts,我們就用Contacts.People.CONTENT_URI來標識Contacts CP中People這個表。那麼要標識某個具體的人怎麼辦呢? 這就用到了ContentUris.withAppendedId() 和 Uri.withAppendedPath()。例如我們要表示content://contacts/people/20,那麼我們就可以用如下語句:
Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, 20); 或者
Uri uri = Uri.withAppendedPath(People.CONTENT_URI, "20");

相關文章