Android中Uri的使用
原文轉自:http://www.cnblogs.com/hnrainll/archive/2011/11/15/2250136.html
1.Uri
通用資源標誌符(Universal Resource Identifier, 簡稱"URI")。
Uri代表要操作的資料,Android上可用的每種資源 - 影象、視訊片段等都可以用Uri來表示。
URI一般由三部分組成:
訪問資源的命名機制。
存放資源的主機名。
資源自身的名稱,由路徑表示。
Android的Uri由以下三部分組成: "content://"、資料的路徑、標示ID(可選)
舉些例子,如:
所有聯絡人的Uri: content://contacts/people
某個聯絡人的Uri: content://contacts/people/5
所有圖片Uri: content://media/external
某個圖片的Uri:content://media/external/images/media/4
我們很經常需要解析Uri,並從Uri中獲取資料。
Android系統提供了兩個用於操作Uri的工具類,分別為UriMatcher 和ContentUris 。
雖然這兩類不是非常重要,但是掌握它們的使用,會便於我們的開發工作。
下面就一起看一下這兩個類的作用。
2.UriMatcher
UriMatcher 類主要用於匹配Uri.
使用方法如下。
首先第一步,初始化:
- UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
- UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
第二步註冊需要的Uri:
- matcher.addURI("com.yfz.Lesson", "people", PEOPLE);
- matcher.addURI("com.yfz.Lesson", "person/#", PEOPLE_ID);
-
matcher.addURI("com.yfz.Lesson", "people", PEOPLE);
- matcher.addURI("com.yfz.Lesson", "person/#", PEOPLE_ID);
第三部,與已經註冊的Uri進行匹配:
- Uri uri = Uri.parse("content://" + "com.yfz.Lesson" + "/people");
- int match = matcher.match(uri);
- switch (match)
- {
- case PEOPLE:
- return "vnd.Android.cursor.dir/people";
- case PEOPLE_ID:
- return "vnd.android.cursor.item/people";
- default:
- return null;
- }
- Uri uri = Uri.parse("content://" + "com.yfz.Lesson" + "/people");
- int match = matcher.match(uri);
- switch (match)
- {
- case PEOPLE:
- return "vnd.Android.cursor.dir/people";
- case PEOPLE_ID:
- return "vnd.Android.cursor.item/people";
- default:
- return null;
- }
match方法匹配後會返回一個匹配碼Code,即在使用註冊方法addURI時傳入的第三個引數。
上述方法會返回"vnd.Android.cursor.dir/person".
總結:
--常量 UriMatcher.NO_MATCH 表示不匹配任何路徑的返回碼
--# 號為萬用字元
--* 號為任意字元
另外說一下,官方SDK說明中關於Uri的註冊是這樣寫的:
- private static final UriMatcher sURIMatcher = new UriMatcher();
- static
- {
- sURIMatcher.addURI("contacts", "/people", PEOPLE);
- sURIMatcher.addURI("contacts", "/people/#", PEOPLE_ID);
- sURIMatcher.addURI("contacts", "/people/#/phones", PEOPLE_PHONES);
- sURIMatcher.addURI("contacts", "/people/#/phones/#", PEOPLE_PHONES_ID);
- sURIMatcher.addURI("contacts", "/people/#/contact_methods", PEOPLE_CONTACTMETHODS);
- sURIMatcher.addURI("contacts", "/people/#/contact_methods/#", PEOPLE_CONTACTMETHODS_ID);
- sURIMatcher.addURI("contacts", "/deleted_people", DELETED_PEOPLE);
- sURIMatcher.addURI("contacts", "/phones", PHONES);
- sURIMatcher.addURI("contacts", "/phones/filter/*", PHONES_FILTER);
- sURIMatcher.addURI("contacts", "/phones/#", PHONES_ID);
- sURIMatcher.addURI("contacts", "/contact_methods", CONTACTMETHODS);
- sURIMatcher.addURI("contacts", "/contact_methods/#", CONTACTMETHODS_ID);
- sURIMatcher.addURI("call_log", "/calls", CALLS);
- sURIMatcher.addURI("call_log", "/calls/filter/*", CALLS_FILTER);
- sURIMatcher.addURI("call_log", "/calls/#", CALLS_ID);
- }
- private static final UriMatcher sURIMatcher = new UriMatcher();
- static
- {
- sURIMatcher.addURI("contacts", "/people", PEOPLE);
- sURIMatcher.addURI("contacts", "/people/#", PEOPLE_ID);
- sURIMatcher.addURI("contacts", "/people/#/phones", PEOPLE_PHONES);
- sURIMatcher.addURI("contacts", "/people/#/phones/#", PEOPLE_PHONES_ID);
- sURIMatcher.addURI("contacts", "/people/#/contact_methods", PEOPLE_CONTACTMETHODS);
- sURIMatcher.addURI("contacts", "/people/#/contact_methods/#", PEOPLE_CONTACTMETHODS_ID);
- sURIMatcher.addURI("contacts", "/deleted_people", DELETED_PEOPLE);
- sURIMatcher.addURI("contacts", "/phones", PHONES);
- sURIMatcher.addURI("contacts", "/phones/filter/*", PHONES_FILTER);
- sURIMatcher.addURI("contacts", "/phones/#", PHONES_ID);
- sURIMatcher.addURI("contacts", "/contact_methods", CONTACTMETHODS);
- sURIMatcher.addURI("contacts", "/contact_methods/#", CONTACTMETHODS_ID);
- sURIMatcher.addURI("call_log", "/calls", CALLS);
- sURIMatcher.addURI("call_log", "/calls/filter/*", CALLS_FILTER);
- sURIMatcher.addURI("call_log", "/calls/#", CALLS_ID);
- }
這個說明估計已經是Google官方沒有更新,首先是初始化方法,沒有傳參,那麼現在初始化時,實際是必須傳參的。 可以看一下Android2.2的原始碼,無引數的構造方法已經是private的了。
另外就是addURI這個方法,第二個引數開始時不需要"/", 否則是無法匹配成功的。
3.ContentUris
ContentUris 類用於獲取Uri路徑後面的ID部分
1)為路徑加上ID: withAppendedId(uri, id)
比如有這樣一個Uri
- Uri uri = Uri.parse("content://com.yfz.Lesson/people")
- Uri uri = Uri.parse("content://com.yfz.Lesson/people")
通過withAppendedId方法,為該Uri加上ID
- Uri resultUri = ContentUris.withAppendedId(uri, 10);
- Uri resultUri = ContentUris.withAppendedId(uri, 10);
最後resultUri為: content://com.yfz.Lesson/people/10
2)從路徑中獲取ID: parseId(uri)
- Uri uri = Uri.parse("content://com.yfz.Lesson/people/10")
- long personid = ContentUris.parseId(uri);
- Uri uri = Uri.parse("content://com.yfz.Lesson/people/10")
- long personid = ContentUris.parseId(uri);
最後personid 為 :10
附上實驗的程式碼:
- package com.yfz;
- import com.yfz.log.Logger;
- import Android.app.Activity;
- import android.content.ContentUris;
- import android.content.UriMatcher;
- import android.net.Uri;
- import android.os.Bundle;
- public class Lesson_14 extends Activity {
- private static final String AUTHORITY = "com.yfz.Lesson";
-
相關推薦
移動開發----android 中uri.parse()用法
android 中uri.parse()用法 //1,調web瀏覽器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri); //2,地圖 U
Android中Uri的使用
原文轉自:http://www.cnblogs.com/hnrainll/archive/2011/11/15/2250136.html 1.Uri 通用資源標誌符(Universal Resource Identifier, 簡稱"URI")。 Uri代表要操作的
java中URI,URL,URL介紹及Android中Uri解析
一、URI 1.1 定義 在電腦術語中,統一資源識別符號(Uniform Resource Identifier,即URI)是一個用於標識某一網際網路資源名稱的字串。 該種標識允許使用者對任何(包括本地和網際網路)的資源通過特定的協議進行互動操作。 1.2 組成 一般格式為:
Android中res/drawable(mipmap)/xxxx.png的Uri和url的轉換
宣告:下列方法已經經過驗證,可用 Uri------>url. /** * res/drawable(mipmap)/xxx.png::::uri---->url * * @return */ private
Android中查詢聯絡人常用的URI
// 查詢聯絡人的Uri Uri contactsUri = Uri.parse("content://com.android.contacts/contacts"); // 查詢聯絡人頭像的Uri Uri uriPhoto = ContentUris.w
操作Android中聯絡人,通話記錄,短息,的URI,和具體的查詢語句,欄位註解。(根據自己需求)
讀取簡訊的URI: /** * 所有的簡訊 */ public static final String SMS_URI_ALL = "content://sms/"; /** * 收件箱簡訊 */ public sta
關於Android中使用Uri監聽資料庫的變化
網上原創的關於監聽資料庫變化的文章很少,基本沒找到有用的一篇,所以自己去看了一下藍芽傳輸的原始碼,寫了一個Demo,放在這裡給大家參考一下,看原始碼: src裡面有三個檔案MyDataProvider、MainActivity和MyBean,看下面:
Android中的URI 和Uri
一、URI與Uri大家可能經常會看到在開發時,怎麼有的時候是URI,有的時候是Uri,這是怎麼回事?名稱如此相像的兩個類是有什麼區別和聯絡?1.所屬的包不同。URI位置在java.net.URI,顯然是Java提供的一個類。而Uri位置在android.net.Uri,是由A
Android中的線程
開發者 又是 ace appcompat 技術 ted unknown 消息通知 設計模型 本文轉自:http://www.jianshu.com/p/d59b3cce2b54 如何理解線程 在操作系統中,線程是操作系統調度的最小單元,同時線程又是一種受限的系統資源,即
Android中getDrawable和getColor過時的替代方法
this logs con 知識 log launcher 16px ase spa 版權聲明:本文為博主原創文章,未經博主允許不得轉載。 前言 Android SDK 升級到 23 之後,getDrawable和getColor方法提示過時。 解決方案 getRe
EventBus在Android中的簡單使用
pos stop hub create 數據傳遞 bsp 還要 GridView itemclick EventBus是一個方便與Android中各組件通信的開源框架,開源地址;https://github.com/greenrobot/EventBus。Ev
Android中通過反射來設置Toast的顯示時間
ring margin ner manage etc short 延遲 lln sse 這個Toast的顯示在Android中的用途還是非常大的,同一時候我們也知道toast顯示的時間是不可控的。我們僅僅能改動他的顯示樣式和顯示的位置,盡管他提供了一個顯示時間的設置方法
Android中的GraphicBuffer同步機制-Fence
mman fill spl 之前 超出 on() passing cli 觸發 Fence是一種同步機制,在Android裏主要用於圖形系統中GraphicBuffer的同步。那它和已有同步機制相比有什麽特點呢?它主要被用來處理跨硬件的情況。尤其是CPU。GPU和HWC
Android中處理大圖片時圖片壓縮
oca 內存空間 pan std ret bitmap sans source tar 1、BitmapFactory.Options中的屬性 在進行圖片壓縮時,是通過設置BitmapFactory.Options的一些值來改變圖片的屬性的,以下我們來看看BitmapF
關於android中的單位(dp、sp)
字號 兩個 metrics 不一定 ont ace white 超級 style android讓人頭疼的適配問題。 --------- Android 中的單位大概有這些: 經常使用的dip、sp。有時候用到px。 --------- 介紹兩個類: Type
android中圖型的陰影效果(shadow-effect-with-custom-shapes)
sim 狀態 odi bottom msu custom top ado cto 思路:在自己定義shape中添加一層或多層,並錯開。就可以顯示陰影效果。為添加立體感,button按下的時候,僅僅設置一層。我們能夠通過top, bottom, right 和 left 四
Android中驗證輸入是否為漢字及手機號,郵箱驗證,IP地址可用port號驗證
bili repl ips gettext content 驗證 arr mat 數據 1,驗證是否為漢字 // 驗證昵稱 private boolean verifyNickname() { String nickname = edt_use
Android中帶你開發一款自動爆破簽名校驗工具kstools
系統服務 代理類 water 利用 技術分享 roo 解決 問題 dia 一、技術回顧 為了安全起見,一些應用會利用自身的簽名信息對應用做一層防護,為了防止應用被二次打包操作,在之前已經介紹了很多關於應用簽名校驗爆破的方法,一條基本原則不能忘:全局搜索"signature"
android中使用videoview播放視頻
idg pla dea extern sch dia 關聯 extend out 先是布局文件: 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 x
Android中的Surface, SurfaceHolder, SurfaceHolder.Callback, SurfaceView
oid 格式 坐標系 androi 繪制 是把 nts embedded 成員 傳入一個surface,然後讓openGL在surface上畫圖 window->view hierachy(DecorView是tree的root)->ViewRoot->