//經過制定setComponent來啓動組件 public void start(View view){ //建立一個意圖 //Intent intent=new Intent(this,MainActivity2.class); Intent intent=new Intent(); //建立組件,經過組件響應,直接Intent ComponentName component=new ComponentName(this, MainActivity2.class); intent.setComponent(component); startActivity(intent); }
public void start1(View view){ Intent intent=new Intent(this,MainActivity9.class); startActivity(intent); }
經過action屬性查找啓動activity,必須在清單文件中進行配置html
//經過action屬性查找啓動activity public void start2(View view){ Intent intent=new Intent(); //設置動做,實際上action就是字符串標記而已 intent.setAction(MainActivity3.MY_ACTION); startActivity(intent); }
MainActivity3
java
package com.example.intent; import android.app.Activity; import android.os.Bundle; /** * 在自定義動做時,使用action組件時,必須添加一個默認類別 * <activity android:name="MainActivity3"> <intent-filter > <action android:name="com.example.action.MY_ACTION"> </action> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> * 若是有多個組件被匹配成功,就會對話框列表的形式讓用戶進行選擇 * */ public class MainActivity3 extends Activity{ //自定義action標記 public static final String MY_ACTION="com.example.action.MY_ACTION"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main3); } }
清單文件中的配置,若是沒有類別,必須寫上默認類別android
<category android:name="android.intent.category.LAUNCHER" />app
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
加入的類別越多,越精確,若是有找不到的類別會報錯(假設有兩個類別,一個類別未找到,則報錯)ide
public void start3(View view){ Intent intent=new Intent(); intent.setAction(MainActivity4.MY_ACTION); intent.addCategory(MainActivity4.MY_CATEGORY); //若是MainActivity4中沒有在清單文件中配置,且寫了下面的類別,則會報錯 //intent.addCategory(MainActivity4.MY_CATEGORY2); //加入的類別越多,越精確,若是有找不到的類別會報錯 startActivity(intent); }
MainActivity4
this
package com.example.intent; import android.app.Activity; import android.os.Bundle; /** * 自定義類別 * 在Intent中能夠添加多個類別 * 那就要求被匹配的組件必須同時知足這多個類別才能匹配成功,不然匹配失敗 * * */ public class MainActivity4 extends Activity{ //自定義動做類別 public static final String MY_CATEGORY="com.example.category.myCategory"; public static final String MY_CATEGORY2="com.example.category.myCategory2"; //自定義動做 public static final String MY_ACTION="com.example.action.myAction2"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main4); } }
清單文件中的MainActivity4
spa
<activity android:name="MainActivity4"> <intent-filter > <!-- <action android:name="com.example.action.MY_ACTION"></action> --> <action android:name="com.example.action.myAction2"></action> <category android:name="com.example.category.myCategory"/> <category android:name="com.example.category.myCategory2"/> <category android:name="android.intent.category.DEFAULT"/> <!-- 沒有類別時要加上默認類別 --> </intent-filter> </activity>
intent中的Date屬性.net
Date屬性表示動做(要操做)的數據component
實際上一個Date是用一個URI對象表示xml
一般狀況下,使用action+date屬性的組合來描述一個意圖(intent)
當Intent匹配的組件有多個時,先顯示優先級高的組件,若是優先級相同,顯示列表讓用戶本身選擇
優先級從-1000到1000,而且其中一個必須爲負值纔有效
MainActivity5:指定訪問一個網址
<intent-filter android:priority="800">
<action android:name="android.intent.action.VIEW"/>
<data android:scheme="http" android:host="java.lampbrother.net"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
Intent intent=new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri=Uri.parse("http://java.lampbrother.net");
intent.setData(uri);
startActivity(intent);
package com.example.intent; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; /** * intent中的Date屬性 * Date屬性表示動做(要操做)的數據 * 實際上一個Date是用一個URI對象表示 * 一般狀況下,使用action+date屬性的組合來描述一個意圖(intent) * * * * 當Intent匹配的組件有多個時,先顯示優先級高的組件,若是優先級相同,顯示列表讓用戶本身選擇 * 優先級從-1000到1000,而且其中一個必須爲負值纔有效 * */ public class MainActivity5 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main5); } public void testActionDateClick(View ivew){ Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri uri=Uri.parse("http://java.lampbrother.net"); intent.setData(uri); startActivity(intent); } public void testActivity7(View view){ Intent intent=new Intent(this,MainActivity7.class); startActivity(intent); } }
清單文件中MainActivity5的配置
<activity android:name="MainActivity5"></activity> <activity android:name="MainActivity6"> <intent-filter android:priority="800"> <action android:name="android.intent.action.VIEW"/> <data android:scheme="http" android:host="java.lampbrother.net"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
Intent
date+type屬性
type表示數據的類型或者MIME類型(如:text/xml,text/html,audio/mp3,p_w_picpath/png...)
date和type屬性,通常只須要一個
經過setDate方法會把type實行設置爲null,相反,設置setType也會把date屬性設置爲null
若是想要兩個屬性同時設置,要使用setDateAndType方法設置
MianActivity7:調用系統選擇(各類)文件,以mp3文件爲例,
package com.example.intent; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; /** * Intent * date+type屬性 * type表示數據的類型或者MIME類型(如:text/xml,text/html,audio/mp3,p_w_picpath/png...) * date和type屬性,通常只須要一個 * 經過setDate方法會把type實行設置爲null,相反,設置setType也會把date屬性設置爲null * 若是想要兩個屬性同時設置,要使用setDateAndType方法設置 * * */ public class MainActivity7 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main7); } public void play7(View view){ Intent intent=new Intent(); intent.setAction(Intent.ACTION_VIEW); Uri date=Uri.parse("file:///sdcard/xx.mp3"); //intent.setData(date); //intent.setDataAndType(data, type); intent.setType("audio/mp3"); startActivity(intent); } }
MainActivity8
package com.example.intent; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; /** * activity的啓動模式:4種 * 1.standard 標準模式,每次啓動都會建立一個新的activity,加入目標任務的棧頂 * 2.singleTop,判斷當前任務棧頂是否存在相同的activity,若是存在直接使用 * 若是不存在,那麼建立新的activity對象放入棧頂 * 3.singleTask:在任務棧中是會判斷否存在相同的activity,若是存在,那麼會清除該activity之上的其餘activity對象來顯示 * 若是不存在,建立新的activity對象放入棧頂 * 4.singleInstance:會在一個新的任務棧中建立activity,而且該任務棧中只容許存在一個activity實例, * 其餘調用該activity的組件會直接使用該任務棧中的activity對象 * * Intent的flags屬性也能夠指定啓動模式 * * * * */ public class MainActivity8 extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main8); } public void start1(View view){ Intent intent=new Intent(this,MainActivity9.class); startActivity(intent); } public void start2(View view){ Intent intent=new Intent(this,MainActivity8.class); //至關於singleTask //intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //至關於singleTop //intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } }