Intent显示意图
Intent隐身意图
Intent6大属性
原创地址:http://write.blog.csdn.net/mdeditor
想要启动的目标组件,用于描述一个目标组件,(或传递参数)跳转Activity组件。
指出目标组件是什么
找一个目标组件,对目标组件做一个简单描述,启动一个Activity,android会根据描述去找,找回来后就会交给你。
用于描述目标组件名
如果Intent对象中含有一个完整的ComponentName属性,那么我们可以认为这个intent对象是一个显式意图。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//intent中也可以直接写
Intent intent=new Intent();
//Context pkg:当前的Context对象
//String cls:类的全限定名:一个类的包名加类名字符串。
//Class<?>cls: 类对象
//ComponentName cn=new Com(Context pkg,Class<?>cls);
//ComponentName cn=new Com(Context pkg,String cls);
//1、第一种方式:
//当前Activity在这个包下,通过这个类的全限定名也可以拿到这个具体类对象
String cls="com.example.MainAcitivty";
Class clazz=Class.forName(cls);
//2、第二种方式:
MainActivity.class
}
与启动目标组件时使用的启动模式有关。
以往我们都是在清单文件中配置,我们也可以在代码中设置:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent=new Intent();
intent.setFlags(Intent.flag.....);//网上自己查intent的flags属性
//例如:FLAG_ACTIVIT_CLEAR__TOP:
//清除栈顶
//自己看注释:比如我们有个activity栈:A、B、C、D,如果D调用startActivity,用intent对象指向B(也就是D启动B),C、D将会被finish,B将会接受到一个intent到栈顶,整个栈当前所在的状态就变成A、B
}
用于在组件之间进行参数传递的(传参)属性。
当前Activity跳转到目标Activity。
intent.putExtra(“”, “”);//往intent对象里面put了,那头就可以get出来,其实传参的属性就在Bundle里.
传递自定义类型对象:
intent.putExtra(“”,new Music());//想把音乐对象传过去,但是参数类型里面没有这个类型,所以要让你的Music这个类implements Serializable(继承序列化接口,序列化协议:我怎么传你怎么接收)。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent=new Intent();
Bundle bundle=new Bundle();
//这里是存
intent.putExtra("xx", new Music());
//这里在目标组件获取时写
Music m=(Music)intent.getSerializableExtra("xx");
}
class Music implements Serializable{
}
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
Bundle传值的案例:
给Button设置隐藏值:hint
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
>
<View
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/gangqinBt"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="钢琴"
android:textSize="15sp"
android:hint="27"
/>
<Button
android:id="@+id/typexiaotiqin"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="小提琴"
android:textSize="15sp"
android:hint="30"
/>
<Button
android:id="@+id/typezhongtiqin"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:background="@drawable/btweixuanzhong"
android:text="中提琴"
android:textSize="15sp"
android:hint="23"/>
<Button
android:id="@+id/typechangdi"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="长笛"
android:textSize="15sp"
android:hint="40"
/>
<Button
android:id="@+id/typeguzheng"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="14dp"
android:background="@drawable/btweixuanzhong"
android:text="古筝"
android:textSize="15sp"
android:hint="28" />
<Button
android:id="@+id/typeerhu"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="14dp"
android:background="@drawable/btweixuanzhong"
android:text="二胡"
android:textSize="15sp"
android:hint="33" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
>
<View
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/jiazigu"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:background="@drawable/btweixuanzhong"
android:text="架子鼓"
android:textSize="15sp"
android:hint="35"
/>
<Button
android:id="@+id/typedatiqin"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="大提琴"
android:textSize="15sp"
android:hint="36" />
<Button
android:id="@+id/typesakesi"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="16dp"
android:background="@drawable/btweixuanzhong"
android:text="萨克斯"
android:textSize="15sp"
android:hint="31" />
<Button
android:id="@+id/typeyoukelili"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="尤克里里"
android:textSize="15sp"
android:hint="21"
/>
<Button
android:id="@+id/typejita"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="吉他"
android:textSize="15sp"
android:hint="26"
/>
<Button
android:id="@+id/button5"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginTop="15dp"
android:background="@drawable/btweixuanzhong"
android:text="全部"
android:textSize="15sp" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
android:orientation="vertical"
>
<View
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
Bundle存值
Fragment中启动intent的时候Bundle属性存值
package com.example.view.main.type;
import com.example.tongyinjiaoyu.R;
import com.example.view.main.other.SignActivity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
/**
* 本类为分类中的器乐类
*/
public class FragmentTypeFragmentIstrumentsMusic extends Fragment implements OnClickListener {
//钢琴选项
Button gangqin;
//架子鼓
Button jiazigu;
//小提琴
Button xiaotiqin;
//大提琴
Button datiqin;
//中提琴
Button zhongtiqin;
//萨克斯
Button sakesi;
//长笛
Button changdi;
//尤克里里
Button youkelili;
//古筝
Button guzheng;
//吉他
Button jita;
//二胡
Button erhu;
//声明加载布局文件
View view;
Bundle bundle;
Intent intent;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
try {
view=view.inflate(getActivity(), R.layout.mainfragmentactivity_type_instrumentsmusic, null);
//设置view
setupView();
//添加事件
addListener();
} catch (Exception e) {
// TODO: handle exception
}
return view;
}
private void setupView() {
gangqin=(Button) view.findViewById(R.id.gangqinBt);
jiazigu=(Button) view.findViewById(R.id.jiazigu);
xiaotiqin=(Button) view.findViewById(R.id.typexiaotiqin);
datiqin=(Button) view.findViewById(R.id.typedatiqin);
zhongtiqin=(Button) view.findViewById(R.id.typezhongtiqin);
sakesi=(Button) view.findViewById(R.id.typesakesi);
changdi=(Button) view.findViewById(R.id.typechangdi);
youkelili=(Button) view.findViewById(R.id.typeyoukelili);
guzheng=(Button) view.findViewById(R.id.typeguzheng);
jita=(Button) view.findViewById(R.id.typejita);
erhu=(Button) view.findViewById(R.id.typeerhu);
}
private void addListener() {
gangqin.setOnClickListener(FragmentTypeFragmentIstrumentsMusic.this);
jiazigu.setOnClickListener(this);
xiaotiqin.setOnClickListener(this);
datiqin.setOnClickListener(this);
zhongtiqin.setOnClickListener(this);
sakesi.setOnClickListener(this);
changdi.setOnClickListener(this);
youkelili.setOnClickListener(this);
guzheng.setOnClickListener(this);
jita.setOnClickListener(this);
erhu.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.gangqinBt:
String id=(String) gangqin.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id);
//将Bundle放入Intent传入下一个Activity
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.jiazigu:
String id1=(String) jiazigu.getHint();//取得隐藏值
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id1);
//将Bundle放入Intent传入下一个Activity
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typexiaotiqin:
String id2=(String) xiaotiqin.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id2);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typedatiqin:
String id3=(String) datiqin.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id3);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typezhongtiqin:
String id4=(String) zhongtiqin.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id4);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typesakesi:
String id5=(String) sakesi.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id5);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typechangdi:
String id6=(String) changdi.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id6);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typeyoukelili:
String id7=(String) youkelili.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle = new Bundle();
bundle.putString("kemu", id7);
intent.putExtras(bundle);
startActivity(intent);
break;
case R.id.typeguzheng:
String id8=(String) guzheng.getHint();
intent=new Intent(getActivity(),xuanXiangFragmentActivity.class);
bundle=new Bundle();
bundle.putString("kemu", id8);
intent.putExtras(bundle);
startActivity(intent);
break;
}
}
}
Bundle取值:
package com.example.view.main.type;
import com.example.tongyinjiaoyu.R;
import com.example.view.main.me.CourseFragmentActivity;
import com.example.view.main.me.CourseInclassFragment;
import com.example.view.main.me.CourseWaitclassFragment;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
@SuppressLint("NewApi")
public class xuanXiangFragmentActivity extends FragmentActivity implements OnClickListener{
/**
* 声明两个Fragment类对象对象
*/
TypeLaoShiFragment typelaoshiFragment;
TypeJiGouFragment typejigouFragment;
/**
* 声明当前类button对象
*/
private Button[] btnArrary=new Button[2];
//声明fragment数组用于存放四个fragment类对象
private Fragment[] fragmentArrary=null;
//定义当前button显示的fragment
private int currentIndex=0;
//选中其他Button,显示其他fragment
private int selectedIndex;
//返回按钮
private ImageView image_tx;
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
try {
setContentView(R.layout.type_xuanxiang);
//找到按钮
setupView();
//单机事件处理
addListener();
} catch (Exception e) {
e.printStackTrace();
}
}
private void setupView() {
//回退按钮
image_tx=(ImageView) findViewById(R.id.image_tx);
image_tx.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
//自动生成方法存根
xuanXiangFragmentActivity.this.finish();
}
});
/**
* 创建四个button存放在Buuton数组
*/
btnArrary[0]=(Button) findViewById(R.id.mainfragmentactivity_type_laoshi);
btnArrary[1]=(Button) findViewById(R.id.mainfragmentactivity_type_jigou);
btnArrary[0].setSelected(true);
/**
* 创建两个fragment存放在Fragment数组
*/
typelaoshiFragment=new TypeLaoShiFragment();
typejigouFragment=new TypeJiGouFragment();
fragmentArrary=new Fragment[]{
typelaoshiFragment,typejigouFragment
};
/**
* 进入主界面显示第一个fragment
*/
FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction transaction=fragmentManager.beginTransaction();
transaction.replace(R.id.fragment_containerTypeFenLei, typelaoshiFragment).addToBackStack(null).commitAllowingStateLoss();
//显示
transaction.show(typelaoshiFragment);
提交
//transaction.commit();
}
private void addListener() {
for(int i=0;i<btnArrary.length;i++){
btnArrary[i].setOnClickListener(this);
}
}
@Override
public void onClick(View v) {
try {
switch (v.getId()) {
case R.id.mainfragmentactivity_type_laoshi:
selectedIndex=0;
break;
case R.id.mainfragmentactivity_type_jigou:
selectedIndex=1;
break;
}
//如果不是显示第一个fragment,让他显示第一个
if(selectedIndex!=currentIndex){
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_containerTypeFenLei, fragmentArrary[selectedIndex]).addToBackStack(null).commitAllowingStateLoss();
btnArrary[currentIndex].setSelected(false);
btnArrary[selectedIndex].setSelected(true);
currentIndex=selectedIndex;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Bundle取值:
package com.example.view.main.type;
import java.util.List;
import java.util.Map;
import com.example.adapter.TypeLaoShiAdapter;
import com.example.tongyinjiaoyu.R;
import com.example.util.ConstantUtils;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hyphenate.chat.EMClient;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;
/**
*
*老师
*
*/
public class TypeLaoShiFragment extends Fragment{
View view;
static String kemu;
Context context;
//map类型的List
private List<Map<String,String>> list;
private ListView lv;
private TypeLaoShiAdapter typelaoshiAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
Intent intent1=getActivity().getIntent();
//获取Intent中的Bundle数据
Bundle qukemu=intent1.getExtras();
kemu=qukemu.getString("kemu");
Log.i("LI", kemu);
try {
view=view.inflate(getActivity(), R.layout.type_laoshi, null);
//加载数据发送http请求
into();
} catch (Exception e) {
e.printStackTrace();
}
iniview();
return view;
}
private void iniview() {
// TODO Auto-generated method stub
lv=(ListView) view.findViewById(R.id.type_laoshi_lV);
//
///**
// * 模拟假数据可删除
// */
在没有服务器连接的时候添加假数据
//list = new ArrayList<Map<String,String>>();
没法连服务器模拟假数据
//Map map = new HashMap();
//map.put("username", "18254191277");
//map.put("headimg", "http");
//map.put("rs", 100);
//map.put("schoolyear", 10);
//map.put("schoolrecord", "本科");
//map.put("teachunit", "计算机");
//list.add(map);
//typelaoshiAdapter=new TypeLaoShiAdapter(getActivity(), list);
//lv.setAdapter(typelaoshiAdapter);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Log.i("LI", position+"");
/*设置进入指定用户名的LiaoTianHuiHuaActivity.class*/
Intent intent1=new Intent(getActivity(),Laoshixiangqing.class);
startActivity(intent1);
//点击进入聊天
/**
* 应将此句调整到登录后获取好友
*/
// try {
//
// List<String> usernames = SignActivity.usernames;
// //便利集合
// boolean find = false;
// String selectUserName = list.get(position).get("username").toString();
// if(null !=usernames){
// for(int i=0;i<usernames.size();i++){
// String nameStr = usernames.get(i);
// if(nameStr.equals(selectUserName)){
// find = true;
// }
// }
// }
//
//
// if(find){//已经是好友,进入聊天回话
//
// //参数为要添加的好友的username和添加理由
// //EMClient.getInstance().contactManager().addContact(selectUserName, "添加好友");
// //聊天回话页面Activity
// startActivity(new Intent(getActivity(), LiaoTianHuiHuaActivity.class));
//
// }else{//不是好友也进入聊天回话
// //参数为要添加的好友的username和添加理由
// //EMClient.getInstance().contactManager().addContact(selectUserName, "添加好友");
// //聊天回话页面Activity
// startActivity(new Intent(getActivity(), LiaoTianHuiHuaActivity.class));
//
//
// }
//
//
// } catch (Exception e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
//
//
//
}
});
}
private View into() {
/**
* 服务器参数:
*
*参数:kmid 注:(传27代表钢琴)
*返回数据:status 状态
*Ls 该科目下的老师的信息
*
*/
SharedPreferences sp=getActivity().getSharedPreferences("user",Context.MODE_PRIVATE);
//将存在sp中用户的手机号取出来传过去进行确定用户
final String userName=sp.getString("username", "");
Log.i("LI","手机号"+userName);
RequestParams params=new RequestParams();
params.addBodyParameter("kmid", kemu);
HttpUtils Utils=new HttpUtils();
Utils.send(HttpMethod.POST, ConstantUtils.wodefenlei_laoshi, params, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
Log.i("LI", "分类老师的数据"+responseInfo.result);
Gson gson = new Gson();
Map<String,Object> map =gson.fromJson(responseInfo.result,new TypeToken <Map<String,Object>>(){}.getType());
if("fail".equals(map.get("status"))){
Toast.makeText(getActivity(), "数据为空", Toast.LENGTH_LONG).show();
}else{
list= (List<Map<String, String>>) map.get("Ls");
typelaoshiAdapter=new TypeLaoShiAdapter(getActivity(), list);
lv.setAdapter(typelaoshiAdapter);
}
}
@Override
public void onFailure(HttpException error, String msg) {
Toast.makeText(getActivity(), "请检查网络", Toast.LENGTH_LONG).show();
}
});
return view;
}
}
用于描述目标组件可以执行的动作
注意:需要给目标组件在清单文件中配置action,在主函数使用Intent描述目标组件的时候向对应。
需要使用intent-filter
例如:
我有一个Activity,他可以支持网页查询的动作。
我有一个Activity,他可以支持播放音乐的动作。
案例:
我提条件,媒婆帮我找
1、 配置清单设置文件
给小芳配置action (会干什么)
给小红配置action(会干什么)
<activity
android:name="com.example.android_day07_intent.XiaoFangActivity"
android:label="@string/title_activity_xiao_fang" >
<!-- 意图过滤器 -->
<intent-filter >
<action android:name="cooking"/>
<action android:name="eating"/>
<!-- 添加默认的category 属性:(定义属性就和定义成女的一样) -->
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
2、 配置完成之后,安卓系统就会扫描你的清单配置文件,就会知道你这个应用程序中有哪些组件,每个组件会干什么,一旦你在主Activity上使用隐示意图跳转界面的时候,就会知道在整个安卓系统中,有哪些Activity去相应你的要求。
所以要在MianActivity上添加一个事件监听:
public void doClick(View view){
switch (view.getId()) {
case R.id.button4:
Intent i4=new Intent();
i4.setAction("eating");
i4.addCategory("Tall");
startActivity(i4);
break;
case R.id.button3:
//会做饭大眼睛的
try {
Intent i3=new Intent();
i3.setAction("cooking");
i3.addCategory("Tall");
//i3.addCategory("LongHair");
startActivity(i3);
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(this, "没有你要的!", Toast.LENGTH_SHORT).show();
}
break;
case R.id.button1:
//会做饭的
Intent i1=new Intent();
i1.setAction("cooking");
startActivity(i1);
break;
case R.id.button2:
//会吃饭
Intent i2=new Intent("eating");
startActivity(i2);
break;
}
}
Android对action的匹配规则:
1>一个activity中的intent-filter可以设置多个action。
2>Intent对象中只能含有一个action。
3>如果intent对象中的action在intent-filter声明的范围之内,那么action匹配成功。
4>如果intent-filter中未声明action,那么默认拒绝所有的action测试。
系统中内置的常见的action:
Intent.ACTION_CALL // 打电话
Intent.ACTION_VIEW
Intent.ACTION_WEB_SEARCH
Intent.ACTION_SEND
用于描述目标组件所属分类
系统中内置的category:
Intent.CATEGORY_APP_BROWSER;
Intent.CATEGORY_APP_CALENDAR;
Intent.CATEGORY_APP_CONTACTS;
Intent.CATEGORY_APP_MARKET;
……
用于描述目标组件所属分类
1>intent对象中可以包含多个category
2>intent-filter中可以配置多个category
3>如果intent对象中的category是intent-filter中category集合的子集,那么category匹配测试成功。
4>注意:
所有被传入startActivity方法intent对象都会默认追加一个category:
Intent.CATEGORY_DEFAULT
广播接收器中不用写category,只有传入startActivity的时候,才会添加默认的category
用于描述目标组件可以处理的数据类型
intent对data属性的匹配规则
1> intent对象中设置data属性 (Uri对象)
2>intent-filter中对data数据格式的要求进行声明。
3>如果intent对象中的data数据符合intent-filter中的要求,那么data匹配成功。
4>如果intent-filter中配置了data属性,而intent对象中没有设置data或data的格式与配置的格式不匹配,则data匹配失败。
1> 如果intent-filter中配置了mimetype(代表可以处理的数据格式),那么intent对象中必须设置uri与mimytype才可以
正常访问:
intent.setDataAndType(uri, “text/html”);//匹配文本/html文本
intent.setDataAndType(uri, “text/xml”);//匹配文本/xmll文本
intent.setDataAndType(uri, “imge/jpg”);//匹配图片/jpg
intent.setDataAndType(uri, “image/gif”);//匹配图片/gif