intent-filter匹配与scheme跳转协议
来源:互联网 发布:开眼角增生知乎 编辑:程序博客网 时间:2024/05/22 05:07
用Intent进行活动及其他组件的启动有显式启动和隐式启动两种方式,显式不必多说,隐式就是在Intent里配置一些参数,然后去和整个系统中注册的组件(一般是activity)进行匹配,启动匹配成功的组件(匹配成功不止一个时全部显示让用户进行选择)。
隐式启动可以方便的跨应用启动活动,在网页中启动等,用到的地方还是很多。
匹配的依据是主配置文件中组件的<intent-filter>子标签,可以不止一组,只要匹配成功其中一组即视为匹配成功。
intent-filter又有action,catagory,data子标签,每个出现次数都是大于等于一,可以认为是三个需要匹配的方面,每一个方面只需匹配其中一个即视为匹配成功。
action和catagory都比较简单,只是一个字符串。data比较复杂,他可以认为分成mimetype和uri两部分,mimetype是媒体类型,有image/jpeg等,这里不做深入探究。uri则对应着data的scheme,host,port等标签。Uri的结构类似于Url,scheme是协议(http),host是域名(www.baidu.com),port就是端口号了。
data匹配成功的条件是,data中出现的所有属性Intent都匹配。
举个例子:
Intent intent=new Intent(Intent.ACTION_VIEW, Uri.parse("test://app")); startActivity(intent);主配置文件中有这么两个活动:
<activity android:name=".CActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="test" /> </intent-filter> </activity> <activity android:name=".DActivity"> <intent-filter> <category android:name="android.intent.category.BROWSABLE"></category> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="test" android:host="app"/> </intent-filter> </activity>
感觉上应该匹配第二个,因为第一个只有scheme没有host,第二个更具体。实际上两个都是匹配的,第一个中给出了scheme,Intent匹配这个scheme,也就是匹配了data中全部属性,所以匹配成功。
其他注意事项:
1.Intent默认带一个DEFAULT的catagory
2.没有DEFAULT的catagory的活动不接受隐式启动
3.检测Intent匹配结果是否为空:
看PackageManager的resolveActivity和quertIntentAtys,Intent的resolveActivity返回值是否为空。这些方法第二个参数设为MATCH_DEFAULT_ONLY,意为只匹配含有DEFAULT的catagory的活动,原因见2.
4.网页中使用隐式启动只需要<a href='uri'/>,默认使用Intent的action是View(也就是说目标aty中要有这个action)。
而且目标aty中必须有BROWSABLE的catagory,否则点击超链接后无法成功跳转(亲测)。
- intent-filter匹配与scheme跳转协议
- Scheme跳转协议
- Scheme跳转协议
- Intent Filter匹配
- Intent Filter匹配
- Intent Filter匹配
- 转:Intent Filter匹配
- Intent Filter匹配
- Intent Filter匹配
- Intent Filter匹配
- Intent Filter匹配规则
- Intent Filter匹配规则
- Android Intent-filter匹配
- Android中Scheme跳转协议
- Intent与<intent-filter>
- intent与intent filter
- 第一讲----Intent Filter匹配
- Intent-Filter的匹配规则
- JavaScript:获取url的querystring参数
- 【Android布局】布局优化之ViewStub、include、merge使用与源码分析
- linux离线搭建SVN服务器系列<一>
- Python----继承
- MySQL数据库安装
- intent-filter匹配与scheme跳转协议
- 关于tableau表格,百分比无法加权汇总
- Java通过fill()方法替换数组元素
- [App] MongoDB Cluster 配置
- java double类型保留位数、double转int
- 集合框架方法和迭代器Iterator
- openssl对数组加密解密的完整实现代码
- 722. Remove Comments
- php 登录后返回上一页面