ComponentName comp = new ComponentName(ManinActivity,this, SecondActivity.class);
Intent intent = new Intent();
intent.setComponent(comp);
startActivity(intent);
指定Component属性的Intent明确它要启动哪个组件,因此这种Intent被称为显式Intent;
没有指定Component属性的Intent被称为隐式Intent.
Action属性和Category属性
- Action属性代表代表该Intent所要完成的一个抽象动作;
Category属性代表为Action增加额外的附加类别消息,Action属性和Category属性经常结合使用.
- 由于是隐式Intent,从代码中无法看出下面程序要去启动哪个Activity.因此,需要启动哪个Activity取决于Activity配置中<intent-filter>.
Intent intent = new Intent();
intent.setAction(MainActivity.CRAZYIT_ACTION);
intent.addCategory(MainActivity.CRAZYIT_CATEGORY);
startActivity(intent)
因此被启动的目标Activity中的配置文件中应该有如下信息:
//AndroidManifest.xml配置文件中SecondActivity的配置信息
//上面代码的MainActivity的路径是在orgcrazyitintentMainActivity.java
<activity android:name=".SecondActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="org.crazyit.intent.action.CRAZYIT_ACTION" />
<category android:name="org.crazyit.intent.category.CRAZYIT_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
< /intent-filter>
< /activity>
==说明==
<category android:name="android.intent.category.DEFAULT" />
-
注意:在AndroidManifest.XM文件中的<intent-filter .../>下可以有多个<action .../>,但是在XXXActivity.java中只能设置一个Action属性,可以有多个Category属性.
- Intent对象不仅可以启动应用程序自身内的组件,还可以启动其他应用程序的组件和系统自带的程序的组件.
Data属性和Type属性
-
Data属性用于向Action属性提供操作的数据,接受一个Uri对象.
- Type属性用于指定该Data属性指定Uri对应的MIME类型,只要符合abc/xyz格式的字符串即可.
-
Data属性与Type属性的关系:
- 如果Intent先设置Data属性,后设置Type属性,那么Type属性会覆盖Data属性
- 如果Intent先设置Type属性,后设置Data属性,那么Data属性会覆盖Type属性
- 如果希望Intent既有Data属性又有Type属性,可以调用setDataAndType()方法.
-
在AndroidManifest.xML文件中为组件声明Data,Type属性通过<data .../>元素,格式如下:
- mimeType:该组件所匹配的Intent的Type属性;
- scheme:该组件所匹配的Intent的Data属性的scheme部分;
- host:该组件所匹配的Intent的Data属性的host部分;
- port:该组件所匹配的Intent的Data属性的port部分;
- path:该组件所匹配的Intent的Data属性的path部分;
- pathPRefix:该组件所匹配的Intent的Data属性的path前缀;
- pathPattern:该组件所匹配的Intent的Data属性的path字符串模板
<data android:mimeType=""
android:scheme=""
android:host=""
android:port=""
android:path=""
android:pathPrefix=""
android:pathPattern=""
/>
-
==说明==:
- 至于Type属性: XXXActivity中Intent通过setType()设置的Type属性 和 AndroidManifest.xm中被启动Activity的<intent-filter .../>元素的<data .../>子元素的mimeType属性完全相同.
至于Data属性: 由于Uri对象可以分为schem,host,port,path部分, 因此不需要与被启动组件的<intent-filter .../>中<data .../>子元素的android:schem,android:host,android:port,android:path完全满足.
- 如果被启动组件B的<data .../>中只指定了android:scheme属性,那么只要组件A中Intent的Data属性的scheme部分与其相同,就可以启动组件B.
- 同理,也可以只指定android:scheme和android:host;
- 也可以只指定android:scheme,android:host和android:port;
- 也可以只指定android:scheme,android:host和android:path;
- 也可以指定android:scheme,android:host,android:port和android:path;
- 但是不能只有android:port没有android:host;也不能只有android:path没有android:host
- 如果希望<data .../>下的子元素能正常起作用.必须配置一个<action .../>子元素,不过<action .../>的android:name可以时任意的字符串.
Intent intent = new Intent();
String data = "http://wwww.crazyit.org";
Uri uri = Uri.parse(data);
intent.setData(uri);
startActivity(intent);
<activity
android_icon="drawable/ic_type"
android_name="SecondActivity"
<intent-filter>
<action android_name="xxx"/>
<category android_name="android.intent.category.DEFAULT"/>
<data
android_scheme="http"
android_host="www.crazyit.org"
/>
</intent-filter>
/activity>
Extra属性
该属性用于多个Action之间的数据交流,其属性值应该是一个Bundle对象,可以通过Intent在不同Activity之间进行数据交换,
Flag属性
该属性用于为对应的Intent添加一些额外的控制标识,可以调用intent 的adDFlags()方法添加控制标识.
脚本宝典总结
以上是脚本宝典为你收集整理的Android Intent全部内容,希望文章能够帮你解决Android Intent所遇到的问题。
如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。