Android URI总结

简介

通用资源标志符(Universal Resource Identifier, 简称"URI")。
Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。从概念上来讲,URI包括URL。

URI命名规则

URI一般由三部分组成:
在Android平台,URI主要分三个部分:scheme, authority and path。
其中authority又分为host和port。格式如下:scheme://host:port/path
例如:

Android URI总结_第1张图片

一些常用URI

  • 打开一个网页,类别是Intent.ACTION_VIEW
Uri uri = Uri.parse(
"[http://www.baidu.com/](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 = Uri.parse("tel:10086");
Intent intent = new Intent(Intent.ACTION_CALL, uri);
  • 卸载一个应用,Intent的类别是Intent.ACTION_DELETE
Uri uri = Uri.fromParts("package", "xxx", null);
Intent intent = new Intent(Intent.ACTION_DELETE, uri);

更多请参考: android 常用URI 值得记住

通过URI跳转到Activity

实现从H5或第三方应用点击进入某应用。
首先,在AndroidManifest.xml里面进行配置,在对应的Activity加上一个intent-filter, 如下:


    
        

        
        

        
    

对应的Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Intent intent = getIntent();
    String action = intent.getAction();
    if (Intent.ACTION_VIEW.equals(action)) {
        Uri uri = intent.getData();
        if (uri != null) {
            String host = uri.getHost();
            String dataString = intent.getDataString();
            String id = uri.getQueryParameter("id");
            String path = uri.getPath();
            String path1 = uri.getEncodedPath();
            String queryString = uri.getQuery();
            Log.d("Alex", "host:"+host);
            Log.d("Alex", "dataString:" + dataString);
            Log.d("Alex", "id:" + id);
            Log.d("Alex", "path:" + path);
            Log.d("Alex", "path1:" + path1);
            Log.d("Alex", "queryString:" + queryString);
        }
    }
}

被调起时的log日志:

host:www.marsthink.com  
dataString:imarsthink://www.marsthink.com/travel/oversea?id=1000  
id:1000  
path:/travel/oversea
path1:/travel/oversea
queryString:id=1000  

第三方App调起方式:

  Uri uri = Uri.parse("imarsthink://www.marsthink.com/travel/oversea?id=1000");
  Intent intent = new Intent(null, uri);
  startActivity(intent);

H5调起方式:

open Android app

UriMatcher

UriMatcher 类主要用于匹配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

ContentUris 类用于获取Uri路径后面的ID部分
1)为路径加上ID: withAppendedId(uri, id)
比如有这样一个Uri

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

ContentProvider:

引用:ContentProvider和Uri详解

你可能感兴趣的:(Android URI总结)