Android 隐式意图的配置
本文地址:http://www.cnblogs.com/wuyudong/p/5677473.html,轉(zhuǎn)載請(qǐng)注明源地址。
《Android 顯示意圖激活另外一個(gè)Actitity》一文介紹了一種激活A(yù)ctivity的方法
本文通過(guò)清單文件(AndroidManifest.xml)來(lái)實(shí)現(xiàn)意圖的配置
Intent-filter屬性詳解
如果一個(gè) Intent 請(qǐng)求在一片數(shù)據(jù)上執(zhí)行一個(gè)動(dòng)作, Android 如何知道哪個(gè)應(yīng)用程序(和組件)能用來(lái)響應(yīng)這個(gè)請(qǐng)求呢??
Intent Filter就是用來(lái)注冊(cè) Activity 、 Service 和 Broadcast Receiver 具有能在某種數(shù)據(jù)上執(zhí)行一個(gè)動(dòng)作的能力。
使用 Intent Filter ,應(yīng)用程序組件告訴 Android ,它們能為其它程序的組件的動(dòng)作請(qǐng)求提供服務(wù),包括同一個(gè)程序的組件、本地的或第三方的應(yīng)用程序。
為了注冊(cè)一個(gè)應(yīng)用程序組件為 Intent 處理者,在組件的 manifest 節(jié)點(diǎn)添加一個(gè) intent-filter 標(biāo)簽。
在 Intent Filter 節(jié)點(diǎn)里使用下面的標(biāo)簽(關(guān)聯(lián)屬性),你能指定組件支持的動(dòng)作、種類(lèi)和數(shù)據(jù):
1.動(dòng)作測(cè)試
<intent-filter>元素中可以包括子元素<action>,比如:
<intent-filter ><action android:name="com.example.project.SHOW_CURRENT" /><action android:name="com.example.project.SHOW_RECENT" /><action android:name="com.example.project.SHOW_PENDING" /> </intent-filter >一條<intent-filter>元素至少應(yīng)該包含一個(gè)<action>,否則任何Intent請(qǐng)求都不能和該<intent-filter>匹配。如果Intent請(qǐng)求的Action和<intent-filter>中個(gè)某一條<action>匹配,那么該Intent就通過(guò)了這條<intent-filter>的動(dòng)作測(cè)試。如果Intent請(qǐng)求或<intent-filter>中沒(méi)有說(shuō)明具體的Action類(lèi)型,那么會(huì)出現(xiàn)下面兩種情況。
(1) 如果<intent-filter>中沒(méi)有包含任何Action類(lèi)型,那么無(wú)論什么Intent請(qǐng)求都無(wú)法和這條<intent-filter>匹配;
(2) 反之,如果Intent請(qǐng)求中沒(méi)有設(shè)定Action類(lèi)型,那么只要<intent-filter>中包含有Action類(lèi)型,這個(gè)Intent請(qǐng)求就將順利地通過(guò)<intent-filter>的行為測(cè)試。
2.類(lèi)別測(cè)試
<intent-filter>元素可以包含<category>子元素,比如:
<intent-filter . . . ><category android:name="android.Intent.Category.DEFAULT" /><category android:name="android.Intent.Category.BROWSABLE" /> </intent-filter >只有當(dāng)Intent請(qǐng)求中所有的Category與組件中某一個(gè)IntentFilter的<category>完全匹配時(shí),才會(huì)讓該 Intent請(qǐng)求通過(guò)測(cè)試,IntentFilter中多余的<category>聲明并不會(huì)導(dǎo)致匹配失敗。一個(gè)沒(méi)有指定任何類(lèi)別測(cè)試的 IntentFilter僅僅只會(huì)匹配沒(méi)有設(shè)置類(lèi)別的Intent請(qǐng)求。
3.數(shù)據(jù)測(cè)試
數(shù)據(jù)在<intent-filter>中的描述如下:
<intent-filter . . . ><data android:type="video/mpeg" android:scheme="http" . . . /><data android:type="audio/mpeg" android:scheme="http" . . . /> </intent-filter ><data>元素指定了希望接受的Intent請(qǐng)求的數(shù)據(jù)URI和數(shù)據(jù)類(lèi)型,URI被分成三部分來(lái)進(jìn)行匹配:scheme、 authority和path。其中,用setData()設(shè)定的Inteat請(qǐng)求的URI數(shù)據(jù)類(lèi)型和scheme必須與IntentFilter中所指定的一致。若IntentFilter中還指定了authority或path,它們也需要相匹配才會(huì)通過(guò)測(cè)試。
? action
使用 android:name 特性來(lái)指定對(duì)響應(yīng)的動(dòng)作名。動(dòng)作名必須是獨(dú)一無(wú)二的字符串,所以,一個(gè)好的習(xí)慣是使用基于 Java?包的命名方式的命名系統(tǒng)。
? category
使用?Android:category 屬性用來(lái)指定在什么樣的環(huán)境下動(dòng)作才被響應(yīng)。每個(gè) Intent Filter 標(biāo)簽可以包含多個(gè) category?標(biāo)簽。你可以指定自定義的種類(lèi)或使用 Android 提供的標(biāo)準(zhǔn)值,如下所示:
? ALTERNATIVE
你將在這章的后面所看到的,一個(gè) Intent Filter 的用途是使用動(dòng)作來(lái)幫忙填入上下文菜單。 ALTERNATIVE 種類(lèi)指定,在某種數(shù)據(jù)類(lèi)型的項(xiàng)目上可以替代默認(rèn)執(zhí)行的動(dòng)作。例如,一個(gè)聯(lián)系人的默認(rèn)動(dòng)作時(shí)瀏覽它,替代的可能是去編輯或刪除它。
? SELECTED_ALTERNATIVE
與 ALTERNATIVE 類(lèi)似,但 ALTERNATIVE 總是使用下面所述的 Intent 解析來(lái)指向單一的動(dòng)作。SELECTED_ALTERNATIVE在需要一個(gè)可能性列表時(shí)使用。
? BROWSABLE
指定在瀏覽器中的動(dòng)作。當(dāng) Intent 在瀏覽器中被引發(fā),都會(huì)被指定成 BROWSABLE 種類(lèi)。
? DEFAULT
設(shè)置這個(gè)種類(lèi)來(lái)讓組件成為 Intent Filter 中定義的 data 的默認(rèn)動(dòng)作。這對(duì)使用顯式 Intent 啟動(dòng)的 Activity 來(lái)說(shuō)也是必要的。
? GADGET
通過(guò)設(shè)置 GADGET 種類(lèi),你可以指定這個(gè) Activity 可以嵌入到其他的 Activity 來(lái)允許。
? HOME
HOME Activity 是設(shè)備啟動(dòng)(登陸屏幕)時(shí)顯示的第一個(gè) Activity 。通過(guò)指定 Intent Filter 為 HOME 種類(lèi)而不指定動(dòng)作的話,你正在將其設(shè)為本地 home 畫(huà)面的替代。
? LAUNCHER
使用這個(gè)種類(lèi)來(lái)讓一個(gè) Activity 作為應(yīng)用程序的啟動(dòng)項(xiàng)。
? data
data 標(biāo)簽允許你指定組件能作用的數(shù)據(jù)的匹配;如果你的組件能處理多個(gè)的話,你可以包含多個(gè)條件。你可以使用下面屬性的任意組合來(lái)指定組件支持的數(shù)據(jù):
? android:host
指定一個(gè)有效的主機(jī)名(例如, com.google )。
? android:mimetype
允許你設(shè)定組件能處理的數(shù)據(jù)類(lèi)型。例如,<type android:value=”vnd.android.cursor.dir/*”/>能匹配任何 Android 游標(biāo)。
? android:path
有效地 URI 路徑值(例如, /transport/boats/ )。
? android:port
特定主機(jī)上的有效端口。
? android:scheme
需要一個(gè)特殊的圖示(例如, content 或 http )。
實(shí)戰(zhàn)一下
添加《Android 顯示意圖激活另外一個(gè)Actitity》中的跳轉(zhuǎn)功能,實(shí)現(xiàn)隱式意圖激活第三個(gè)界面
代碼:
// 采用隱式意圖激活第三個(gè)界面public void click3(View view) {Intent intent = new Intent();intent.setAction("com.wuyudong.xxx");intent.addCategory("android.intent.category.DEFAULT");//intent.setData(Uri.parse("wuyudong:hahaha"));//指定數(shù)據(jù)類(lèi)型//intent.setType("vnd.android.cursor.item/xixixi"); intent.setDataAndType(Uri.parse("wuyudong:hahaha"), "vnd.android.cursor.item/xixixi");startActivity(intent);}可以在OtherScreenActivity接收數(shù)據(jù),代碼如下:
public class OtherScreenActivity extends Activity {//重寫(xiě)activity的onCreate方法 方法里面設(shè)置初始化程序的界面 @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_two);Intent intent = getIntent(); //獲取到激活它的意圖Uri uri = intent.getData();System.out.println(uri.getScheme());} }清單文件代碼如下:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.wuyudong.twoactivity"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:icon="@drawable/icon1"android:name="com.wuyudong.twoactivity.MainActivity"android:label="@string/activity01" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:icon="@drawable/icon2"android:name="com.wuyudong.twoactivity.OtherScreenActivity"android:label="@string/activity02" ><intent-filter><action android:name="com.wuyudong.xxx"/><data android:scheme="wuyudong" android:mimeType="vnd.android.cursor.item/xixixi"></data><category android:name="android.intent.category.DEFAULT"/></intent-filter></activity></application></manifest>總結(jié)
以上是生活随笔為你收集整理的Android 隐式意图的配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 住宅的结构有哪些形式
- 下一篇: Android环境搭建遭遇Unsuppo