android中的意圖有顯和隱式意圖兩種,
顯要求必須知道被啟用組件的包和class
隱式意圖只需要知道跳轉activity的動作和資料,就可以啟用對應的組件
A 主activity B 接收跳轉的activity
步驟
1:在主設定檔中聲明B 至少要聲明一個android:name屬性
[html]
<activity
android:name=".DemoActivity"
android:label="@string/demoActivity" >
<intent-filter>
<!-- 隱士意圖中指定intent的名字 自己定義 可匹配多項 -->
<action android:name="com.itcast.intent.DemoActivity" />
<!-- 隱式intent需要指定的activity的類型,可自己定義該值,需要在調用的時候相對應不寫該項預設為 android.intent.category.DEFAULT,可匹配多項 -->
<category android:name="android.intent.category.DEFAULT" />
<!-- 指定傳想該activity數值的類型 和主機,如果指定該項,就必須在跳轉activity的時候傳入還資料和主機名稱 -->
<data
android:host="cn.itcast.demo"
android:scheme="itcast" />
</intent-filter>
</activity>
2:在A的布局檔案中一個textview和button,並添加點擊事件
[html]
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一個activity" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="open"
android:text="跳轉" />
3:點擊事件觸發的集中intent意圖
[java]
/**
* 意圖,描述一個動作,啟用一個組件,使用其他的activity需要現在主檔案中配置activity的名字等屬性
* intent 要去做一件事
*
* @param view
*/
public void open(View view) {
/**
* 方法一
*/
Intent intent1 = new Intent();
// 1.是當前的包名,2跳轉activity的類名,一定要加上包名
intent1.setClassName("com.itcast.intent", "com.itcast.intent.DemoActivity");
// startActivity(intent1);
/**
* 方法二
*/
Intent intent2 = new Intent(this, DemoActivity.class);
// startActivity(intent2);
/**
* 方法三
*/
Intent intent3 = new Intent();
ComponentName component = new ComponentName("com.itcast.intent", "com.itcast.intent.DemoActivity");
intent3.setComponent(component);
// startActivity(intent3);
/**
* 上面三種方法要求必須知道被啟用組件的包和class,稱為顯
*/
// ******************************************************************//
/**
* 隱式意圖只需要知道跳轉activity的動作和資料,就可以啟用對應的組件<br>
* 如果要啟用另外程式的組件
*/
Intent intent = new Intent();
intent.setAction("com.itcast.intent.DemoActivity");
// 不管在主設定檔中有沒有聲明跳轉activity的category,都要寫該項,不然報錯找到activity,不些有系統會以默認的類型
intent.addCategory("android.intent.category.DEFAULT");
// 如果在聲明activity的時候指定了data屬性,在跳轉的時候就一定要設定他的data屬性值,和配置的屬性值相等,不然也會報找不到的錯誤
intent.setData(Uri.parse("itcast://cn.itcast.demo"));
// startActivity(intent);
Intent imageIntent = new Intent();
imageIntent.setAction(Intent.ACTION_PICK);
imageIntent.setType("image/*");// 設定資料類型
startActivity(imageIntent);
}
DemoActivity 不需要做任何事,只要繼承activity,並重寫他的oncreate方法就可以了,這個例子只是測試activity的跳轉的幾個方法