Android学习笔记----Intent基本用法

来源:互联网 发布:怎样在淘宝上捡漏 编辑:程序博客网 时间:2024/06/05 08:34

Intent 意图 , 描述一个动作, 激活一个组件 


显示意图   必须要知道被激活的组件的包名和 class的名字

  第一种写法
     
Intent intent = new Intent();intent.setClassName("cn.itcast.mutileactivity", "cn.itcast.mutileactivity.Demo2Activity");

  第二种写法
     
   
Intent intent = new Intent(this,Demo2Activity.class);

     
  第三种写法
   
  
Intent intent = new Intent();ComponentName  component = new ComponentName("cn.itcast.mutileactivity", "cn.itcast.mutileactivity.Demo2Activity");intent.setComponent(component);。。。。。。。。。。。。。


public Intent setClassName (String packageName, String className)

packageName  要启动的组件所在的应用程序的包名

className        要启动的Acticity或者其他组件的名称

隐式意图

<activity    android:name=".activity.ChooseAreaActivity"    android:label="@string/title_activity_choose_area" >    <intent-filter>        <action android:name="android.intent.action.MAIN" />       <category android:name="android.intent.category.DEFAULT" />    </intent-filter></activity>


<action>     标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_START 这个 action
<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的 Intent 中还可能带有的 category

只有<action>和<category>中的内容同时能够匹 配上 Intent 中指定的 action 和 category 时,这个活动才能响应该 Intent

Intent intent = new Intent("android.intent.action.MAIN"); 
startActivity(intent);

android.intent.category.DEFAULT 是一种默认的 category,在调用startActivity()方法的时候会自动将这个 category 添加到 Intent 中,所以没有调用addCategory("android.intent.category.DEFAULT "),也可以启动活动。


注意:每个 Intent 中只能指定一个 action,但却能指定多个 category。


还可以在<intent-filter>标签中再配置一个<data>标签,用于更精确地指定当前活动能够响应什么类型的数据。 

<data>标签中主要可以配置以下内容。
 1. android:scheme        用于指定数据的协议部分,如上例中的 http 部分。
 2. android:host              用于指定数据的主机名部分,如上例中的 www.baidu.com 部分。
 3. android:port              用于指定数据的端口部分,一般紧随在主机名之后。
 4. android:path              用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
 5. android:mimeType   用于指定可以处理的数据类型,允许使用通配符的方式进行指定。

只有<data>标签中指定的内容和 Intent 中携带的 Data 完全一致时,当前活动才能够响应该 Intent。不过一般在<data>标签中都不会指定过多的内容,如浏览器示例,只需要指定 android:scheme 为 http,就可以响应所有的 http 协议的 Intent 了。

<activity    android:name=".activity.ChooseAreaActivity"    android:label="@string/title_activity_choose_area" >    <intent-filter>        <action android:name="android.intent.action.MAIN" />       <category android:name="android.intent.category.DEFAULT" />        <data android:scheme="haha" android:host="cn.itcast.demo"  />    </intent-filter></activity>

Intent intent = new Intent("android.intent.action.MAIN"); intent.setData(Uri.parse("haha://cn.itcast.demo"));startActivity(intent);

例子:程序中调用浏览器,代码如下:

 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://163.com"));  startActivity(intent); 

或者

 Intent intent = new Intent(Intent.ACTION_VIEW);  intent.setData(Uri.parse("http://163.com")); startActivity(intent); 


打开图库

Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/jpeg");


/************************************************************/

Activity间传递数据

传递单个数据
    主Activity

     Intent data = new Intent("","");
     data.putExtra("name", name);
     startActivity(data);

    被激活的Activity

    Intent data = getIntent();
    String name = data.getStringExtra("name","");

传递多个数据
    主Activity
   
    Intent data = new Intent("","");
    Bundle bundle = new Bundle();
    bundle.putString("name","zhangsan");
    bundle.putString("sex","nan");
    data.putExtras(bundle);
    startActivity(data);

   被激活的Activity

    Intent data = getIntent();
    Bundle bundle = data.getExtras();
    String name = bundle.getString("name","");
    String sex     = 
bundle.getString("sex","");


/************************************************************/

获取被激活的Activity返回的数据


主Activity

    private final int REQUESTCODE_A=1;//  requestCode用来判断是从哪个Activity返回的    private final int REQUESTCODE_B=2;//    Intent intent_a = new Intent("","");    intent_a.putExtra("name","name");    startActivityForResult(intent_a,REQUESTCODE_A);//第二个参数是requestCode,以此来判断数据是从哪个Activity返回的    Intent intent_b = new Intent("","");    intent_b.putExtra("dianhua","123456");    startActivityForResult(intent_b,REQUESTCODE_B);//第二个参数是requestCode,以此来判断数据是从哪个Activity返回的

注意:如果要获取激活的Activity返回的数据, 在用startActivityForResult(”“,”“)激活活动时,一定不要使用finish()方法销毁原来的活动,即startActivityForResult(”“,”“)方法跟finish()方法不要同时使用。
重写Activity的 onActivityResult方法
   
 @Override        protected void onActivityResult(int requestCode, int resultCode, Intent data) {            // TODO Auto-generated method stub              super.onActivityResult(requestCode, resultCode, data);            if(resultCode==2){  //如果resultCode==2则说明处理成功                if(requestCode==REQUESTCODE_A){ // 判断数据是从哪个Activity返回的                   String result = data.getStringRxtra("dedaole","");//接收返回数据                      ............................................................................................                }else if(requestCode==REQUESTCODE_B){                   ..........................................................................................................                }            }       }

requestCode     用来判断数据是从哪个Activity返回的
resultCode        用来标示被激活的Activity接收到传递过来的数据后,对数据的处理结果,处理的结果不同返回的数据不同。

被激活的Activity

 ......................................................//此处为获取Activity传递过来的数据,并作出相应的处理,根据处理的结果不同,返回不同的“结果码: resultCode”Intent data = new Intent();data.putExtra("dedaole", "dedaole");setResult(2, data);  //返回的2是“结果码: resultCode”,设置不同的结果码来表示数据处理的不同结果,此处返回的结果码为2,来表示数据处理成功。finish();


























0 0
原创粉丝点击