android intent 隱式意圖和顯示意圖(activity跳轉)

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的跳轉的幾個方法

You May Also Like