在目標<data/>標籤中包含了如下幾種子元素,他們定義了url的匹配規則:java
android:scheme 匹配url中的前綴,除了「http」、「https」、「tel」...以外,咱們能夠定義本身的前綴android
android:host 匹配url中的主機名部分,如「google.com」,若是定義爲「*」則表示任意主機名數組
android:port 匹配url中的端口app
android:path 匹配url中的路徑ide
在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>
注意:this
這個標識比較特殊,它定義了執行此Activity時所須要的數據,也就是說,這些數據是必須的!!!!!全部若是其它條件都足以激活該Activity,但intent卻沒有傳進來指定類型的Data時,就不能激活該activity!!!!google
Intent的Type屬性顯式指定Intent的數據類型(MIME)。通常Intent的數據類型可以根據數據自己進行斷定,可是經過設置這個屬性,能夠強制採用顯式指定的類型而再也不進行推導。url
使用該函數表示要查找文件的mime類型(如*/*),這個和組件在manifest裏定義的相對應,但在源代碼裏:spa
public Intent setData(Uri data) { mData = data; mType = null; return this; }
會將type設爲null。
該函數的參數是uri,因此要將數據經過該函數傳遞時,記得要把數據轉化爲uri,如Uri.fromFile(new File("/mnt/sdcard/"))。
該函數源代碼
public Intent setType(String type) { mData = null; mType = type; return this; }
因此要同時設置data和type的話只能用函數setdataandtype了
public Intent setDataAndType(Uri data, String type) {
mData = data;
mType = type;
return this;
}
Extras屬性主要用於傳遞目標組件所須要的額外的數據。經過putExtras()方法設置。
經常使用值以下所示:
EXTRA_BCC:存放郵件密送人地址的字符串數組。
EXTRA_CC:存放郵件抄送人地址的字符串數組。
EXTRA_EMAIL:存放郵件地址的字符串數組。
EXTRA_SUBJECT:存放郵件主題字符串。
EXTRA_TEXT:存放郵件內容。
EXTRA_KEY_EVENT:以KeyEvent對象方式存放觸發Intent的按鍵。
EXTRA_PHONE_NUMBER:存放調用ACTION_CALL時的電話號碼
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下載
最後,以上例子都來源與安卓無憂,請去應用寶或者豌豆莢下載:例子源碼,源碼例子文檔一網打盡