Android-Intent详解

郑光济
2023-12-01

Intent显示意图
Intent隐身意图
Intent6大属性
原创地址:http://write.blog.csdn.net/mdeditor

Intent:

想要启动的目标组件,用于描述一个目标组件,(或传递参数)跳转Activity组件。

显式意图

指出目标组件是什么

隐式意图

找一个目标组件,对目标组件做一个简单描述,启动一个Activity,android会根据描述去找,找回来后就会交给你。

Intent对象的6大属性

ComponentName

用于描述目标组件名
如果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


    }

Flags

与启动目标组件时使用的启动模式有关。
以往我们都是在清单文件中配置,我们也可以在代码中设置:

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
}       

Bundle

用于在组件之间进行参数传递的(传参)属性。
当前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

用于描述目标组件可以执行的动作
注意:需要给目标组件在清单文件中配置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

用于描述目标组件所属分类

系统中内置的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

data

用于描述目标组件可以处理的数据类型
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

 类似资料: