赞
踩
使用Intent可以激活Android应用三种类型的核心组件:活动、服务和广播接收者。
Intent可以划分成显式意图和隐式意图。
显式意图: 调用Intent.setComponent() \ Intent.setClassName或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了要激活的组件是哪个组件
比如以下代码为显式意图:
@Override
public void onClick(View view) {
//设置跳转到其他应用
Intent intent=new Intent();
intent.setClassName("com.example.mysingleinstance1","com.example.mysingleinstance1.MainActivity");
startActivity(intent);
}
});
隐式意图: 没有明确指定组件名的Intent为隐式意图。Android系统会根据隐式意图中设置的 动作(action)、类别(category)、数据(URI和数据类型) 找到最合适的组件来处理这个意图。
AndroidManifest.xml 文件中设置动作、类别、数据、
intent-filter 设置意图过滤器
action设置动作
category 设置类别
startActivity是这个方法内部为Intent自动添加的类别android.intent.category.DEFAULT 所以我们要在XML中添加
data 设置数据
相当于https://
android:scheme=“example”
域名
android:host=“www.biao.cn”
路径
android:path="/kl"/
设置数据的类型
android:mimeType=“image”
<activity android:name=".OtherActivity" android:label="新Activity" android:exported="true"> <!--intent-filter意图过滤器--> <intent-filter> <!--action动作--> <action android:name="com.example.xxx"/> <!--类别category--> <category android:name="com.example.Other.java"/> <!--startActivity是这个方法内部为Intent添加的类别android.intent.category.DEFAULT--> <category android:name="android.intent.category.DEFAULT"/> <!--数据--> <!--只要schem和host能够匹配上就行--> <!--example://www.biao.cn--> <!--限制主机名--> <!--限制路径--> <data android:scheme="example" android:host="www.biao.cn" android:path="/kl"/> <!--设置数据的类型--> <data android:mimeType="image/*"/> </intent-filter> </activity>
调用隐式意图:
intent.setAction(“com.example.xxx”); 设置动作
intent.addCategory(“com.example.Other.java”); 添加类别
intent.setData(Uri.parse(“example://www.biao.cn/kl”)); 设置数据。xml文件中没限定路径就可以随便写
intent.setType(“image/jpeg”); 数据的类型。
方法内部会清除前面setData方法所设置的数据。。在setData前面设置setType也是不行的。所以我们要用Intent方法内部的setDataAndType可以同时设置数据和数据类型
intent.setDataAndType(Uri.parse(“example://www.biao.cn/kl”),“image/jpeg”); 同时设置数据和数据类型
this.findViewById(R.id.openActivity).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { /* * 只要Intent中的动作(Action)和类别(Category)都出现过滤器(Intent-Filter中,就能与之匹配,否则匹配失败) * */ // startActivity(new Intent(MainActivity.this,OtherActivity.class));//显式意图 Intent intent=new Intent();//采用隐式意图激活Activity //设置动作 intent.setAction("com.example.xxx"); //添加类别 intent.addCategory("com.example.Other.java"); //数据的类型 //方法内部会清除前面setData方法所设置的数据。。在setData前面设置setType也是不行的。 // 所以我们要用Intent方法内部的setDataAndType可以同时设置数据和数据类型 //intent.setType("image/jpeg"); //数据 //intent.setData(Uri.parse("example://www.biao.cn/kl"));//后面的路径可以随便写 //同时设置数据和数据类型 intent.setDataAndType(Uri.parse("example://www.biao.cn/kl"),"image/jpeg"); //激活启动 //startActivity这个方法内部会添加android.intent.category.DEFAULT。所以要在过滤器中添加才能完全匹配 startActivity(intent); } });
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。