intent:Intent是系统各组件之间进行数据传递的数据负载者。当我们需要做一个调用动作,我们就可以通过Intent告诉Android系统来完成这个过程,Intent就是调用通知的一种操作。
Intent有几个重要的属性,下面我们将会逐一介绍:
1.action,要执行的动作
public void gotoTargetActivity(View view) {
Intent intent = new Intent();
intent.setAction("android.intent.action.VIEW");
startActivity(intent);
}
2.data和extras,即执行动作要操作的数据和传递到目标的附加信息
/**
* 打开指定网页
* @param view
*/
public void invokeWebBrowser(View view) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.google.com.hk"));
startActivity(intent);
}
/**
* 进行关键字搜索
* @param view
*/
public void invokeWebSearch(View view) {
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "android"); //关键字
startActivity(intent);
其中可对data进行自定义:
在目标<data/>
标签中包含了以下几种子元素,他们定义了url的匹配规则:
android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”…之外,我们可以定义自己的前缀
android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名
android:port 匹配url中的端口
android:path 匹配url中的路径
android:pathPrefix,表示路径前缀。
<data android:scheme="scott" android:host="com.ssss.intent.data" android:port="7788" android:path="/target"/>
当使用extras进行数据传输,其中还涉及到了Bundle对象。创建一个Bundle实例,然后将具体的参数信息放置到Bundle实例中,然后intent指定这个Bundle对象。
public void gotoTargetActivity(View view) {
Intent intent = new Intent("com.ssss.intent.action.TARGET");
Bundle bundle = new Bundle();
bundle.putInt("id", 0);
bundle.putString("name", "ssss");
intent.putExtras(bundle);
startActivity(intent);
}
然后再使用intent获取到Bundle对象,取出对象中的数据。
Bundle bundle = intent.getExtras();
int id = bundle.getInt("id");
String name = bundle.getString("name");
3.category,要执行动作的目标所具有的特质或行为归类
4.type:要执行动作的目标Activity所能处理的MIME数据类型
<data android:mimeType="image/*" /> //图片
5.component,目标组件的包或类名称
可进行app内部,也可以再app之间进行intent跳转与传输数据。
需要注意的是,如果我们在Intent中指定了component属性,系统将不会再对action、data/type、category进行匹配。