一、隐式意图介绍

显式意图我们前面已经提到,形如:

Intent intent = new Intent();

intent.setClass(this,Other.class);//此句表示显式意图,因为明确设置激活对象为Other类

startActivity(intent);

顾名思义,隐式意图就是在不明确设置激活对象的前提下寻找最匹配的组件,举个例子,比如有5个人:

(1)A:170cm

(2)B:160cm

(3)C:180cm

(4)D:190cm

(5)E:200cm

如果是显示意图的话,如果我们要指明选择A的话会说:”我选择A.“,但是如果是隐式意图,则会说:”我要选择170cm的人“,虽然没有指明要选A,但会寻找条件最匹配的人。

在intent过滤器中类似于上面例子中的”身高“条件的匹配条件有:

(1)action

(2)category

(3)data:scheme、host、path、type

当在程序中设置了这些激活组件的条件,程序就会去寻找最匹配的组件,但是注意:只要有一点不匹配,则就是不匹配;

比如:

Intent intent = new Intent();

intent.setAction("a");//此句只是指定了Action

startActivity(intent);//寻找最匹配的组件激活,内部会调用intent.addCategory("android.intent.category.DEFAULT");

二、隐式Intent的核心代码

首先是在AndroidManifest.xml中为某个Activity设置意图过滤器:

[html] view
plain
copy

  1. <activity>
  2. <intent-filter>
  3. <action android:name="...."/>
  4. <category android:name="...."/>
  5. <category android:name="android.intent.category.DEFAULT"/>    <!--此句一般都要加 -->
  6. <data android:scheme="..." android:host="..." android:path="/..." android:type="..."/>
  7. </intent-filter>
  8. </activity>

以上设置是设置Activity本身的属性,接下来在程序中要设置的是我们要寻找时匹配的条件:

(1)Intent intent = new Intent();

(2)intent.setAction("....");

(3)intent.addCategory("....");

(4)intent.setData(Uri.parse("...."));//设置data的scheme、host、path条件

(5)intent.setDataAndType(Uri.parse(""),String type);//同时设置data的scheme、host、path、type条件

(6)startActivity(intent);//调用intent.addCategory("android.intent.category.DEFAULT");

三、代码举例



场景介绍:在MainActivity中有一个按钮,点击按钮后,会进行隐式Intent匹配,最后寻找到并激活OtherActivity.

情况1:

[html] view
plain
copy

  1. <activity
  2. android:name=".OtherActivity"
  3. android:label="OtherActivity" >
  4. <intent-filter>
  5. <action android:name="com.xiazdong.action" />
  6. <category android:name="android.intent.category.DEFAULT" />
  7. <category android:name="com.xiazdong.category" />
  8. <data
  9. android:host="www.xiazdong.com"
  10. android:scheme="xiazdong"/>
  11. </intent-filter>
  12. </activity>

则代码为:

[java] view
plain
copy

  1. Intent intent = new Intent();
  2. intent.setAction("com.xiazdong.action");
  3. intent.addCategory("com.xiazdong.category");
  4. intent.setData(Uri.parse("xiazdong://www.xiazdong.com/xia"));
  5. startActivity(intent);      //此方法中调用intent.addCategory("android.intent.category.DEFAULT");

情况2:



在<data>中多了一个android:mimeType="text/*",此时不能使用intent.setData,而要使用intent.setDataAndType();

[html] view
plain
copy

  1. <activity
  2. android:name=".OtherActivity"
  3. android:label="OtherActivity" >
  4. <intent-filter>
  5. <action android:name="com.xiazdong.action" />
  6. <category android:name="android.intent.category.DEFAULT" />
  7. <category android:name="com.xiazdong.category" />
  8. <data
  9. android:host="www.xiazdong.com"
  10. android:scheme="xiazdong" android:mimeType="text/*"/>
  11. </intent-filter>
  12. </activity>

代码为:

[java] view
plain
copy

  1. Intent intent = new Intent();
  2. intent.setAction("com.xiazdong.action");
  3. intent.addCategory("com.xiazdong.category");
  4. intent.setDataAndType(Uri.parse("xiazdong://www.xiazdong.com"),"text/*");

android addCategory()等说明的更多相关文章

  1. android通过webview调起支付宝app支付

    webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这样的监听事件之后,当请求url的时候就不会打开手机自带 ...

  2. Android:让WebView支持<input type=”file”…>元素

    最近在做一个活动页面:用户上传一张图片进行缩放.旋转后点击下一步填写内容后生成图片! 做好后经过各种测试是没有问题的,基本没有什么明显BUG,流程都能走通,但是嵌入到APP后,问题就来了! 在IOS上 ...

  3. android Intent介绍

    Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 ...

  4. Android开发案例 - 欢迎界面

    本文详细描述了如何实现如下图中的微信启动界面. 该类启动界面的特点是在整个Application的生命周期里, 它只会出现在第一次进入应用时, 即便按回退键到桌面之后. 使用该类启动界面的应用还有: ...

  5. android 关闭多个或指定activity

    打开了.activityA,B,C,D,...然后到E一起关闭前面所有activity(转自:http://blog.csdn.net/lengguoxing/article/details/4214 ...

  6. Android开发之应用程序的安装

    这里介绍的是用XUtils下载apk文件,然后进行安装. 首先用HttpUtils下载文件(记得获取SD卡的读写权限和联网的权限): /** * 下载Apk */ private void downL ...

  7. Android 系统工具类SystemUtils

    包含的功能有: 获取系统中所有APP应用.获取用户安装的APP应用.根据包名和Activity启动类查询应用信息.跳转到WIFI设置.WIFI网络开关.移动网络开关.GPS开关 当前若关则打开 当前若 ...

  8. Android基础学习第三篇—Intent的用法

    写在前面的话: 1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对 ...

  9. Android 如何判断一个应用在运行(转)

    Android 如何判断一个应用在运行  在一个应用中,或一个Service .Receiver中判断一个应用是否正在运行,以便进行一些相关的处理. 这个时候我们需要得到一个ActivityManag ...

随机推荐

  1. STM32-正弦波可调(50HZ~20KHZ可调、峰峰值0~3.3V可调)

    1.原理: 通过定时器每隔一段时间触发一次DAC转换,然后通过DMA发送正玄波码表值给DAC. 当需要改变频率HZ时,只需要修改定时器频率即可(最高只能达到20KHz) 当需要改变正玄波的正峰峰值/负 ...

  2. Spring Cloud学习笔记-003

    服务提供者:向注册中心注册服务 1. 新建maven工程,骨架选择quickstart,工程名称:demo-member 2. 加入相关依赖: 3. 编写服务接口: 4. 在src\main\reso ...

  3. vue2.0 带头冲锋(打包时,小心萝卜坑)

    距离上一期,时间间距可能有点长.谁让本人处于兴奋状态,生活已经不能自理. 哈哈哈,嗯,正经一下, 在已有的经验里总结一下那些容易抓狂的坑! 起因:npm run build 打包 本地运行,你以为可以 ...

  4. app 下载更新 file-downloader 文件下载库的简单介绍和使用

    app 下载更新 file-downloader 文件下载库的简单介绍和使用 今天介绍一个下载库:file-downloader 文件下载库 说明: * 本文内容来自原 file-downloader ...

  5. 获取 Let's Encrypt 免费通配符证书实现Https

    说明 3月14日,Let's Encrypt的执行董事Josh Aas对外宣布,他们的通配符证书正式上线,用户可以基于此特性轻松部署/开启所有子域名的HTTPS功能. Let's Encrypt 是国 ...

  6. jenkins实战(一):war安装及插件安装

    一:整体介绍 以下摘自维基百科: Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目复刻. Jenkins提供了软件开发的持续集成服务.它运行在 ...

  7. Centos常用命令之:搜索

    在linux中,所有的文件都是以目录树的形式存在的.而每个发行版的文件存放之间又会有些差别. 这时候,如果我们想看某个命令或者文档的时候就必须先通过某种方式找到改文档的所在位置. 在linux中提供了 ...

  8. [BZOJ]1064: [Noi2008]假面舞会

    题目大意:n个人,k种假面,每人戴一种,戴第i种的可以看见第i+1种,戴第k种的可以看见第1种,给出m条关系表示一个人可以看到另一个人,问k可能的最大值和最小值.(n<=100,000,m< ...

  9. [USACO Jan09] 安全路径

    Gremlins最近在农场上泛滥,它们经常会阻止牛们从农庄(牛棚_1)走到别的牛棚(牛_i的目的 地是牛棚_i).每一个gremlin只认识牛_i并且知道牛_i一般走到牛棚_i的最短路经.所以它 们在 ...

  10. 例10-11 uva11181

    题意:n个人去逛超市,第i个人买东西的概率是pi,,计算每个人实际买了东西的概率 思路: 搜索标处理所以的情况,得出所有概率和all(开始天真的以为是1 - -,就说怎么案例看着怪怪的),用tt[i] ...