Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Intent屬性詳解三 data、type和extra,intentextra

Intent屬性詳解三 data、type和extra,intentextra

編輯:關於android開發

Intent屬性詳解三 data、type和extra,intentextra


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了

public Intent setDataAndType(Uri data, String type) { 

        mData = data; 

        mType = type; 

        return this; 

    } 

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>

 

本人微博:honey_11

Demo下載
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:例子源碼,源碼例子文檔一網打盡

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved