百科词条 ↓
统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。
该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI由包括确定语法和相关协议的方案所定义。
Web上可用的每种资源 -HTML文档、图像、视频片段、程序等 - 由一个通用资源标识符(Uniform Resource Identifier, 简称"URI")进行定位。
存放资源的自身的名称,由路径表示。
参考下面的URI,它符合当前的RFC4395规范:协议名称://域名.根域名/目录/文件名.后缀
有的URI指向一个资源的内部。 这种URI以"#"结束,并跟着一个anchor标志符(称为片段标志符)。
相对URI不包含任何命名规范信息。它的路径通常指同一台机器上的资源。相对URI可能含有相对路径(如,“…”表示上一层路径),还可能包含片段标志符。
假设我们有一个基本的URI: 协议://域名/目录a/目录b/文件c
<IMG src="../icons/logo.gif" alt="logo">
它扩展成完全的URI就是 “协议://域名/目录a/icons/logo.gif”。
表面上看URI包含了URL
URI包含了URL
大家平时说的,将“URL”放到浏览器中。这里提到的URL ,其实不是一个URL ,是网址的意思。URI 是统一资源标识符,而 URL 是统一资源定位符。笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。
Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。
首先第一步,初始化:
UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
第二步,注册需要的Uri:
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;
}
match方法匹配后会返回一个匹配码Code,即在使用注册方法addURI时传入的第三个参数。
上述方法会返回"vnd.Android.cursor.dir/person".
总结:
ContentUris 类用于获取Uri路径后面的ID部分
Uri uri = Uri.parse("content://com.yfz.Lesson/people");
通过withAppendedId方法,为该Uri加上ID
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);
最后personid 为 :10
管理联系人的Uri:
ContactsContract.Contacts.CONTENT_URI
管理联系人的电话的Uri:
ContactsContract.CommonDataKinds.Phone.CONTENT_URI
管理联系人的Email的Uri:
ContactsContract.CommonDataKinds.Email.CONTENT_URI
电话信息表的外键id为ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
电话号码栏名称为:ContactsContract.CommonDataKinds.Phone.NUMBER.
data表中Email地址栏名称为:
ContactsContract.CommonDataKinds.Email.DATA
其外键栏为:ContactsContract.CommonDataKinds.Email.CONTACT_ID)
存储在sd卡上的音频文件:
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
存储在手机内部存储器上的音频文件:
MediaStore.Audio.Media.INTERNAL_CONTENT_URI
SD卡上的图片文件内容:
MediaStore.Audio.Images.EXTERNAL_CONTENT_URI
手机内部存储器上的图片:
MediaStore.Audio.Images.INTERNAL_CONTENT_URI
SD卡上的视频:
MediaStore.Audio.Video.EXTERNAL_CONTENT_URI
手机内部存储器上的视频:
MediaStore.Audio.Video.INTERNAL_CONTENT_URI
图片的显示名栏:Media.DISPLAY_NAME,
图片的详细描述栏为:Media.DESCRIPTION
图片的保存位置:Media.DATA
短信URI:
Content://sms
发送箱中的短信URI:
Content://sms/outbox
收信箱中的短信URI:
Content://sms/sent
草稿中的短信URI:
Content://sms/draft
常用代码:
// 获取手机号
Cursorphone=cursor.query
(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.
CONTACT_ID +"="+ContactId, null, null);
// 复杂点:
Cursor phone = cursor.query
(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +"="
+ ContactId +" AND "+ ContactsContract.CommonDataKinds.Phone.
+ TYPE +"="+ ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
null, null);
ContactsContract.CommonDataKinds.Phone.TYPE
表示联系人电话的类型,
主要对应如下:
TYPE_MOBILE : 手机号码
TYPE_HOME : 住宅电话
TYPE_WORK : 公司电话
打开一个网页,类别是Intent.ACTION_VIEW
Uri
uri = Uri.parse("http://www.baidu.com/");
Intent
intent = new Intent(Intent.ACTION_VIEW,uri);
打开地图并定位到一个点
Uri
uri = Uri.parse("geo:52.76,-79.0342");
Intent
intent = new Intent(Intent.ACTION_VIEW, uri);
打开拨号界面,类型是Intent.ACTION_DIAL
Uri
uri = Uri.parse("tel:10086");
Intent
intent = new Intent(Intent.ACTION_DIAL,uri);
uri = Uri.parse("tel:10086");
intent = new Intent(Intent.ACTION_CALL, uri);
参考:
https://baijiahao.baidu.com/s?id=1591884958560949588&wfr=spider&for=pc
https://blog.csdn.net/DUANJIEFEI/article/details/46274581
https://blog.csdn.net/sunqiujing/article/details/75011871