1. 程式人生 > >Intent--顯示意圖和隱式意圖

Intent--顯示意圖和隱式意圖

一:顯示意圖

顯式意圖:呼叫Intent.setComponent()或Intent.setClass()方法明確指定了元件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個元件。

例如通過意圖跳轉到另一個Activity的兩種方式:

1:第一種方式跳轉的顯式意圖

   Intent intent = new Intent();
   intent.setClassName("待啟動Activity的包名","待啟動Activity的完整類路徑")//包名getPackageName()
   intent.putExtra("name",name);//通過意圖傳遞資料
   startActivity(intent);//跳轉到另一個Activity

2:第二種方式跳轉的顯式意圖
   Intent intent = new Intent(context,AnotherActivity.class);//第二個引數是待啟動Activity的類的反射
   intent.putExtra("name",name);//可通過意圖向另一個Activity傳遞資料
   startActivity(intent);//跳轉到另一個Activity

另一個Activity中:
Intent intent1=getIntent();//獲取傳遞過來的意圖
intent.getStringExtra("name");//獲取前一個Activity傳遞過來的資料

二:隱式意圖

隱式意圖:沒有明確指定元件名的Intent為隱式意圖。 Android系統會根據隱式意圖中設定的動作(action)、類別(category)、資料(URI和資料型別)找到最合適的元件來處理這個意圖。

例如給某個Activity定義隱式意圖:在清單檔案中的該Activity標籤中建立意圖過濾器:

     <intent-filter>
        <action android:name="android.intent.yinsiyitu.action"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:mimeType="application/person"/>
        <data android:scheme="jianren" android:host="www.ggl.com"/>
     </intent-filter>

另一個Activity通過上面的Activity定義的意圖過濾器訪問上面的Activity:
    Intent intent = new Intent();
    intent.setAction("android:intent.yinsiyitu.action");
    intent.addCategory(Intent.CATEGORY_DEFAULT);
    //intent.setData(Uri.parse(jianren://www.ggl.com));//會清除前面所有set的type
    //intent.setType("application/person");//會清除前面所有的set的data
    //這是setData和setType兩全的方法,另外如果上面的Activity定義了host,則這裡一定也要指定
    intent.setDataAndType(Uri.parse("jianren://www.ggl.com"),"application/person");
    //如果上面的Activity沒有定義host,則Uri.parse("jianren:");至少要寫到冒號,不可以只寫Uri.parse("jianren")
    startActivity(intent);