編輯:關於Android編程
activity的啟動分為隱式和顯式兩種,要使用隱式的啟動,那麼intentFilter是非常重要的一個知識點。
這裡將講解intentFilter的匹配規則。
可以看到,intentFilter中有action,category,以及data這幾種形式的信息。
在xml中的intent-filter中可以配置多個action值,在隱式啟動的intent中,最多只能指定一個action值,要想隱式啟動成功,則必須指定這個action的值,且這個action值必須匹配上xml配置的任意一個值。
值得注意的是,action是區分大小寫的。
在隱式啟動的intent中,系統都會默認加上android.intent.category.DEFAULT這種category,因此,在xml中也必須指定這種值,這是成功調用的前提條件。category的規則和action不大相同。分為2種情況;
intent中含有category:
那麼這些category必須都匹配上xml指定的值。
intent中沒有category:
這種情況下,系統會在intent中設置默認的category,也就是android.intent.category.DEFAULT,如果這個值能匹配上xml中指定的,那麼也能調用成功。
data的數據相對比較復雜,我們先看看它的完整數據項:
可以看到,data由兩部分組成,一部分是mimeType代表了數據的媒體類型,其他的是URI,指定了資源的位置。
看看URI的結構:
://:/[||]
例如:
content://com.baidu.haha:8080/dir/src/text.txt
http://www.baidu.com:80/dir/src/text.txt
上面的兩種例子說明了URI的格式對。
這裡值得說明的是path,pathPrefix以及pathPattern的區別,path指的是完整的路徑,例如上訴例子中path代表“/dir/src/text.txt”,而pathPrefix代表了完整路徑的起始部分,可以是/dir也可以是/dir/src,pathPattern則是符合正則表達式的路徑,可以用正則表達式來表示路徑,從而實現匹配。值得注意的是,pathPattern使用中,如果要表達例如這類在正則表達式中有作用的字符,那麼需要進行轉義,但是寫成“*”是不行的,因為清單文件是一個xml文件,他在被系統讀取到內存的時候,會被轉義一次,當pathPattern被當作正則表達式的讀取的時候又會轉義一次,所以這裡有兩次轉義。所以,應該寫成“\”,而“\”則要寫成”\\”
data如下的兩種寫法效果一致:
使用隱式啟動的時候,最好判斷一下是否有匹配該隱式intent的activity,否則啟動會出錯。要判斷是否有符合條件的activity有兩種方法,一是使用packageManager的resolveActivity方法,一是使用Intent的resolveActivity,如果找不到匹配的就返回null,我們可以根據返回值判斷是否有合適的activity。
看看方法:
public ActivityInfo resolveActivityInfo(PackageManager pm, int flags)
這裡的flags需要解釋一下,我們一般會使用MATCH_DEFAULT_ONLY這個標志位,因為這個標志位代表了,僅僅返回在xml中聲明了android.intent.category.DEFAULT的activity,而這是隱式啟動成功的前提條件。
數據存儲在開發中是使用最頻繁的,在這裡主要介紹Android平台中實現數據存儲的5種方式,更加系統詳細的介紹了5種存儲的方法和異同。 第一種: 使用SharedPre
最近,公司的項目開始使用谷歌官方最新推出的IDE——Android Studio 1.0,發現使用studio打渠道包很容易。 下面
運行效果C#實現using Android.App;using Android.OS;using Android.Widget;namespace ImageDemo{
很多用戶不知道,其實在隨著用戶使用微信的時間推移,微信應用會產生大量的緩存文件,這樣久而久之會造成手機內存不足的問題,並且在手機運行速度方面也有所影響,故此
本文站在巨人的肩膀上 自我感覺又進了一步而成。基於翔神的大作基礎之上寫的