Intent属性详解三 data、type和extra

来源:互联网 发布:先创网络 编辑:程序博客网 时间:2024/06/03 20:07

先看效果图:

1 Data  执行时要操作的数据

在目标<data/>标签中包含了以下几种子元素,他们定义了url的匹配规则:

android:scheme 匹配url中的前缀,除了“http”、“https”、“tel”...之外,我们可以定义自己的前缀

android:host 匹配url中的主机名部分,如“google.com”,如果定义为“*”则表示任意主机名

android:port 匹配url中的端口

android:path 匹配url中的路径

在XML中声明可以操作的data域应该是这样的:

<activity android:name=".TargetActivity">  <intent-filter>      <action android:name="com.scott.intent.action.TARGET"/>      <category android:name="android.intent.category.DEFAULT"/>      <data android:scheme="scott" android:host="com.scott.intent.data" android:port="7788" android:path="/target"/>  </intent-filter>  </activity>  

 

注意:

这个标识比较特殊,它定义了执行此Activity时所需要的数据,也就是说,这些数据是必须的!!!!!所有如果其它条件都足以激活该Activity,但intent却没有传进来指定类型的Data时,就不能激活该activity!!!!

2 Intent的Type属性

Intent的Type属性显式指定Intent的数据类型(MIME)。一般Intent的数据类型能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型而不再进行推导。

3 方法

1  settype

使用该函数表示要查找文件的mime类型(如*/*),这个和组件在manifest里定义的相对应,但在源代码里:

public Intent setData(Uri data) {         mData = data;         mType = null;         return this;     } 

 

会将type设为null。

2  setdata

该函数的参数是uri,所以要将数据通过该函数传递时,记得要把数据转化为uri,如Uri.fromFile(new File("/mnt/sdcard/"))。

该函数源代码

public Intent setType(String type) {         mData = null;         mType = type;         return this;     } 

 

3 setdataandtype

所以要同时设置data和type的话只能用函数setdataandtype了

<span style="font-size:12px;">public Intent setDataAndType(Uri data, String type) {         mData = data;         mType = type;         return this;     } <span style="font-family:Arial;BACKGROUND-COLOR: #ffffff"></span></span>

4 Extras:

  Extras属性主要用于传递目标组件所需要的额外的数据。通过putExtras()方法设置。

    常用值如下所示:

    EXTRA_BCC:存放邮件密送人地址的字符串数组。 

    EXTRA_CC:存放邮件抄送人地址的字符串数组。

    EXTRA_EMAIL:存放邮件地址的字符串数组。 

    EXTRA_SUBJECT:存放邮件主题字符串。 

    EXTRA_TEXT:存放邮件内容。 

    EXTRA_KEY_EVENT:以KeyEvent对象方式存放触发Intent的按键。  

    EXTRA_PHONE_NUMBER:存放调用ACTION_CALL时的电话号码

 

5 Demo源码

activity:

package mm.shandong.com.testdatatype;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.TextView;import java.util.ArrayList;public class TestDataTypeActivity extends AppCompatActivity {    TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test_data_type);        textView= (TextView) findViewById(R.id.textView);    }    public void readDataAndType1(View view){            Intent intent=new Intent();           Uri uri= Uri.parse("http://www.baidu.com/2.asp");           intent.setData(uri);           intent.setType("abc/efg");           String str="Data: "+intent.getDataString()+", Type:"+intent.getType();          textView.setText(str);    }    public void readDataAndType2(View view){        Intent intent=new Intent();        intent.setType("abc/efg");        Uri uri= Uri.parse("http://www.baidu.com/2.asp");        intent.setData(uri);        String str="Data: "+intent.getDataString()+", Type:"+intent.getType();        textView.setText(str);    }    public void readDataAndType3(View view){        Intent intent=new Intent();        Uri uri= Uri.parse("http://www.baidu.com/2.asp");        intent.setDataAndType(uri,"abc/efg");        String str="Data: "+intent.getDataString()+", Type:"+intent.getType();        textView.setText(str);    }    public void startDataAndType1(View view){        Intent intent=new Intent();        intent.setAction("TestDataTypeActivityXXX");        Uri uri= Uri.parse("ottp://");        intent.setData(uri);        startActivity(intent);    }    public void startDataAndType2(View view){        Intent intent=new Intent();        intent.setAction("TestDataTypeActivityXXX");        Uri uri= Uri.parse("ottp://shandong.mm");        intent.setData(uri);        startActivity(intent);    }    public void startDataAndType3(View view){        Intent intent=new Intent();        intent.setAction("TestDataTypeActivityXXX");        Uri uri= Uri.parse("ottp://shandong.mm:8080");        intent.setData(uri);        startActivity(intent);    }    public void startDataAndType4(View view){        Intent intent=new Intent();        intent.setAction("TestDataTypeActivityXXX");        Uri uri= Uri.parse("ottp://shandong.mm:8080/pathparent/pathchild");        intent.setData(uri);        startActivity(intent);    }    public void startDataAndType5(View view){        Intent intent=new Intent();        intent.setAction("TestDataTypeActivityXXX");        Uri uri= Uri.parse("ottp://shandong.mm:8080/pathparent/pathchild");        intent.setDataAndType(uri,"abc/efg");        startActivity(intent);    }}

 清单文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="mm.shandong.com.testdatatype">    <application        android:allowBackup="true"        android:icon="@mipmap/ic_launcher"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">        <activity            android:name=".TestDataTypeActivity"            android:configChanges="keyboardHidden|orientation|screenSize" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>            </activity>        <activity            android:name=".TestDataTypeActivity1"            android:configChanges="keyboardHidden|orientation|screenSize"            android:label="含有scheme">            <intent-filter>                <action android:name="TestDataTypeActivityXXX" />                <category android:name="android.intent.category.DEFAULT" />                <data android:scheme="ottp" />            </intent-filter>        </activity>        <activity            android:name=".TestDataTypeActivity2"            android:configChanges="keyboardHidden|orientation|screenSize"            android:label="含有host">            <intent-filter>                <action android:name="TestDataTypeActivityXXX" />                <category android:name="android.intent.category.DEFAULT" />                <data                    android:host="shandong.mm"                    android:scheme="ottp" />            </intent-filter>        </activity>        <activity            android:name=".TestDataTypeActivity3"            android:configChanges="keyboardHidden|orientation|screenSize"            android:label="含有port">            <intent-filter>                <action android:name="TestDataTypeActivityXXX" />                <category android:name="android.intent.category.DEFAULT" />                <data                    android:host="shandong.mm"                    android:port="8080"                    android:scheme="ottp" />            </intent-filter>        </activity>        <activity            android:name=".TestDataTypeActivity4"            android:configChanges="keyboardHidden|orientation|screenSize"            android:label="含有path">            <intent-filter>                <action android:name="TestDataTypeActivityXXX" />                <category android:name="android.intent.category.DEFAULT" />                <data                    android:host="shandong.mm"                    android:path="/pathparent/pathchild"                    android:port="8080"                    android:scheme="ottp" />            </intent-filter>        </activity>        <activity            android:name=".TestDataTypeActivity5"            android:configChanges="keyboardHidden|orientation|screenSize"            android:label="data和type同时存在">            <intent-filter>                <action android:name="TestDataTypeActivityXXX" />                <category android:name="android.intent.category.DEFAULT" />                <data                    android:host="shandong.mm"                    android:mimeType="abc/efg"                    android:path="/pathparent/pathchild"                    android:port="8080"                    android:scheme="ottp" />            </intent-filter>        </activity>    </application></manifest>

 Demo下载
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子源码,源码例子文档一网打尽。

本人微博:honey_11

 

0 0
原创粉丝点击