在 ApiDemos 中,最开始在界面上面要显示的数据是通过 getData 方法来获取的,而在这个方法中有两句话
[sourcecode language=”java”]Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_SAMPLE_CODE);[/sourcecode]
是关于 Intent 的。不同于我们平常使用
[sourcecode language=”java”]new Intent(MainActivity.this,XXX.class)[/sourcecode]
即指明了要跳转的 activity 对象。这种属于显式 Intent,即指明了跳转对象的 Intent。
还有一种 Intent 是隐式 Intent,例如 getData 方法中的那两句。他的功能是跳转到一个未知路径,但是已知功能的 Activity。下面放一个例子(原地址:http://blog.csdn.net/h3c4lenovo/article/details/7722259):
有三个 Activity:【MainActivity.java】【BAcitvity.java】【CActivity.java】
假设这是一个照相应用 MainActivity 是程序入口,BActivity 和 CActivity 都可以处理照相的内容。
在我们不会使用 action 的时候我们要使这个应用既可以使用 BActivity 照相,又能使用 CActivity 照相如何实现?
当然是在 MainActivity 中写两个 Button,
[sourcecode language=”java”]new Intent(MainActivity.this,BActivity.class);
new Intent(MainActivity.this,CActivity.class);[/sourcecode]
通过两种不同的 Intent 来发起请求,这种情况我们就是使用了显式 Intent,因为我们在代码中显式的指定了要跳转的位置。
然后我们来看隐式 Intent 是怎么做的:
首先我们新建两个 Activity,命名为 BActivity 和 CActivity,然后在 Manifest 文件中注册,注册好之后平常的状态应该是这样子的:
[sourcecode language=”java”][/sourcecode]
然后我们对他进行修改,修改为:
[sourcecode language=”java”][/sourcecode]
也就是给他们每个都添加一个 intent-filter, 其中 action 就是我们在代码中要使用的 action 值,通过这个值来找到这个 activity,category 也是必须的(我实验了下)。
然后我们在 MainActivity 中显示一个可以点击的按钮,点击发送:
[sourcecode language=”java”]new Intent("com.wudkj.VIEW");startActivity(intent);[/sourcecode]
之后会弹出一个 dialog 让你选择
看上面显示的两个就是【BActivity】【CActivity】,点击之后分别可以进入到两个 Activity 中,这样就是隐式的 Intent,只要符合条件的都可以被选择。
需要注意的是:
[sourcecode language=”java”]//action 中的 name 可以自定义,但是如果想要调用到这个 Activity 的话那么在 new Intent 的时候给 Intent 的 action 就需要是 xxxxxxx//这个必须有 [/sourcecode]
除了以上 filter 中的 action 以及 category 之外,还有 data 标签用来约束格式。
我的测试代码:http://pan.baidu.com/s/1mgtEVxQ
转载请注明:热爱改变生活.cn » 从 ApiDemos 中学习 Intent
本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 从 ApiDemos 中学习 Intent