1. Activity 配置清單檔案屬性詳列
首先基本定義,找了一些 定義和 意思很全的。
Action:屬性的值為一個字元串,它代表了系統中已經定義了一系列常用的動作。通過setAction()方法或在清單檔案AndroidManifest.xml中設定。預設為DEFAULT。
Data:通常是URI格式定義的操作資料。例如:tel:// 。通過setData()方法設定。
Category:屬性用于指定目前動作(Action)被執行的環境。通過addCategory()方法或在清單檔案AndroidManifest.xml中設定。預設為:CATEGORY_DEFAULT。
Action:
**ACTION_MAIN:**Android Application的入口,每個Android應用必須且隻能包含一個此類型的Action聲明。
ACTION_VIEW:系統根據不同的Data類型,通過已注冊的對應Application顯示資料。
ACTION_EDIT:系統根據不同的Data類型,通過已注冊的對應Application編輯示資料。
ACTION_DIAL:打開系統預設的撥号程式,如果Data中設定了電話号碼,則自動在撥号程式中輸入此号碼。
ACTION_CALL:直接呼叫Data中所帶的号碼。
ACTION_ANSWER:接聽來電。
ACTION_SEND:由使用者指定發送方式進行資料發送操作。
ACTION_SENDTO:系統根據不同的Data類型,通過已注冊的對應Application進行資料發送操作。
**ACTION_BOOT_COMPLETED:**Android系統在啟動完畢後發出帶有此Action的廣播(Broadcast)。
**ACTION_TIME_CHANGED:**Android系統的時間發生改變後發出帶有此Action的廣播(Broadcast)。
**ACTION_PACKAGE_ADDED:**Android系統安裝了新的Application之後發出帶有此Action的廣播(Broadcast)。
**ACTION_PACKAGE_CHANGED:**Android系統中已存在的Application發生改變之後(如應用更新操作)發出帶有此Action的廣播(Broadcast)。
ACTION_PACKAGE_REMOVED:解除安裝了Android系統已存在的Application之後發出帶有此Action的廣播(Broadcast)。
Category:
**CATEGORY_DEFAULT:**Android系統中預設的執行方式,按照普通Activity的執行方式執行。
CATEGORY_HOME:設定該元件為Home Activity。
CATEGORY_PREFERENCE:設定該元件為Preference。
CATEGORY_LAUNCHER:設定該元件為在目前應用程式啟動器中優先級最高的Activity,通常為入口ACTION_MAIN配合使用。
CATEGORY_BROWSABLE:設定該元件可以使用浏覽器啟動。
CATEGORY_GADGET:設定該元件可以内嵌到另外的Activity中。
Extras:
EXTRA_BCC:存放郵件密送人位址的字元串數組。
EXTRA_CC:存放郵件抄送人位址的字元串數組。
EXTRA_EMAIL:存放郵件位址的字元串數組。
EXTRA_SUBJECT:存放郵件主題字元串。
EXTRA_TEXT:存放郵件内容。
EXTRA_KEY_EVENT:以KeyEvent對象方式存放觸發Intent的按鍵。
EXTRA_PHONE_NUMBER:存放調用ACTION_CALL時的電話号碼。
Data:
tel://:号碼資料格式,後跟電話号碼。
mailto://:郵件資料格式,後跟郵件收件人位址。
smsto://:短息資料格式,後跟短信接收号碼。
content://:内容資料格式,後跟需要讀取的内容。
file://:檔案資料格式,後跟檔案路徑。
1.1 通過 Action 可以隐式啟動(利用setAction方法啟動Activity還有一個好處就是不需要知道包名和Activity類名,隻需要知道action就可以隐式的啟動activity)
注意 1: 如果有2個activity 擁有相同的 action 則會讓使用者手動選擇
注意 2: 如果隻添加 Category 屬性去 啟動的話 會失敗
注意 3: 可以有多個 intent-filter
<activity android:name=".TestActivity" >
<intent-filter >
<action android:name="aa.bb.cc"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
啟動代碼:
Intent.setAction( "aa.bb.cc");
//不加下面這行也行,因為intent的這個屬性預設值即系
Intent.CATEGORY_DEFAULT
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivity( intent );
1.2 根據 action 和 Data 啟動 (Data 可以有1個,也可以有多個,隻要比對到其中1個就可)
注意1:如果scheme沒有指定,那其它的屬性均無效;
注意2:如果host沒有指定,那麼port,path,pathPrefix,pathPattern均無效;
注意3:mimeType 不能和 scheme 同用
<activity android:name=".Test" >
<intent-filter>
<action android:name="android.intent.action.leo"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:scheme=" MyHttp"
android:host="mywww.llz.com"
android:port="8080" >
</data>
</intent-filter>
</activity>
說明:
當無 host
Uri uri = Uri.parse(” MyHttp://”);
Uri uri = Uri.parse(” MyHttp:”);
當有host
Uri uri = Uri.parse(” MyHttp://mywww.llz.com”);
當有port
Uri uri = Uri.parse(” MyHttp://mywww.llz.com:8080”);
URL
MyHttp://www.google.com/
啟動代碼:
根據action 和data
Intent in = new Intent();
in.setAction("android.intent.action.leo");
in.setData(uri);
startActivity(in);
根據action 和type
<data android:mimeType="www.zkw.com" ></data>
Intent in = new Intent();
in.setAction("android.intent.action.leo");
in.setType("www.zkw.com");
startActivity(in);
1.3 複合使用
當有 action 和 data 時可以用
action + cate
action + data(未設定 type)
action + data.type (設定type)
Intent intent = getIntent();
String intentCategories = intent.getCategories()
String intentType = intent.getType();
Uri uri = intent.getData();
uri.getQuery()
uri.getQueryParameter(key)
uri.getQueryParameterNames()
uri.getQueryParameters(key)
uri.getBooleanQueryParameter(key, defaultValue)
uri.getHost()
uri.getPath()
uri.getPath()
String uriScheme = uri.getScheme();
String uriPath = uri.getPath();
String uriHost = uri.getHost();
String uriEncodedPath = uri.getEncodedPath();
0. 實際例子:
0.1 正常啟動 activity,誇程式啟動activity
最好使用 action 啟動
Intent intent = new Intent();
intent.setAction(action);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
Intent intent = new Intent();
intent.setClass(mContext, Player.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(intent);
這裡寫代碼片
0.2 通過 url 格式啟動 activity,主體思路設定 scheme = “http”,這樣就可以識别 http:// 格式,如果需要浏覽器可以嘗試打開該應用,添加CATEGORY_BROWSABLE,
http://myapp.web:80
<activity
android:name=".Test">
<intent-filter>
<data
android:host="myapp.web"
android:scheme="http" >
<data android:port="80"/>
</data>
<action android:name="test.web" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity>