Android傳值方法細(xì)講
在Android這一開源的手機(jī)操作系統(tǒng)中,有很多應(yīng)用技巧以及修改方式值得我們?nèi)フ莆眨瑏砀淖兪謾C(jī)性能,滿足我們的應(yīng)用需求。在這里我們就先來為大家詳細(xì)介紹一下有關(guān)Android傳值的方法。#t#
當(dāng)一個application 中有多個 Activity的時候,那么每個Activity之前的傳值就是一個問題了。所以這里介紹一下相關(guān)的方法。
在Android傳值,主要使用兩種方法一個是PendingIntent 另一個就是廣播了
按照大類,我把Android傳值相關(guān)的類進(jìn)行了劃分
1.實體類 Intent 、Context 、 BroadcastReceiver
2.方法類 PendingIntent Context.sendBroadcast
傳遞的方法 也就是方法類中的兩種
A Intent 字面意思是意圖,其實他的效果和字面意思差不多,高煥堂的很多書中都有詳細(xì)的介紹。
他就像一個快遞員,而且是個無所不能的快遞員,什么都能送,只要你能把信息加到他上面去
詳細(xì)的使用方法可以再SDK中找到,如果想要添加你想要的內(nèi)容 可以用 Intent.set**系列方法。
B Context 這個翻譯成環(huán)境更好一些
顧名思義 他就是獲取我們當(dāng)前的環(huán)境狀態(tài), 比如說我想知道現(xiàn)在用戶使用的什么語言,處于什么狀態(tài),航班、靜音。用戶有沒有接打電話
等等,就像我們獲取系統(tǒng)時間一樣。Context也我們設(shè)置了一個容器讓我們來獲取系統(tǒng)的狀況。
因為這個系統(tǒng)狀況很重要,有的時候就是以系統(tǒng)狀態(tài)為依據(jù),所以Intent 好多方法都要加入這個 都需要 Intent.context
C BroadcastReceiver 是專門用來接收廣播的類
所以他有一個OnReceive()的方法 而具體的接受 我在下面詳述。
α PendingIntent 這個方法就是直接傳遞 Intent
好傳出了,怎么才能保證Android傳值能接收到呢?因為Intent是一個很強(qiáng)大的快遞員,他能記錄貨物需要達(dá)到的地點,所以PendingIntent 干嗎,他相當(dāng)于一個Intent的工作場所,他只負(fù)責(zé)
Intent送出去
而Intent 去那里,直接告訴 Intent就可以了
通過下面這條語句就可以達(dá)到顯影的效果 intent.setClass(Activity.this//指代Activity, Report.class//指代目標(biāo)類);
接收端怎么獲取消息呢,這個也簡單。因為Intent 已經(jīng)按照他自己的地址來到了所處的地方,我們直接實例化就行了。
當(dāng)然這是在簡單的情況下,就是說如果這個公司只有一個貨物所以我們之需要一個快遞員就可以,接收方目前只有這個貨物需要接收,那快遞員一到他接收方只要確認(rèn)一下就知道他來干嘛了。
但多數(shù)情況下,兩家公司的業(yè)務(wù)非常繁忙,所以可能有多個快遞員,多個貨物,同一個部門可能有多個。那么怎么來做呢。就需要加限定規(guī)則
(1)首先是 在Intent中加限定,可以設(shè)定一個 Permission String 就像暗號一樣,如果暗號對了肯定錯不了 (這個在廣播方法中很重要)
(2)另一個就是在實例化的時候確定好實例的是那個一個 參數(shù)
β Android傳值使用廣播來進(jìn)行數(shù)據(jù)傳遞
如果直接使用PendingIntent 是有目的的傳送, 那廣播可真算是漫無目的的傳送信息了
其實Broadcast 中傳遞的內(nèi)容也是Intent ,但可以傳遞的范圍可是遠(yuǎn)的多。
而且系統(tǒng)的很多其他程序也在發(fā)送廣播,比如說手機(jī)的狀態(tài),還要說一下航班狀態(tài),如果出于航班狀態(tài),那么系統(tǒng)就會自動發(fā)送廣播,而我們只要去接收就好,這樣我們就能知道哦,系統(tǒng)現(xiàn)在時在廣播狀態(tài)。
而在Widget 接受方法使用廣播,一方面是因為AppWidget 本來就是繼承BroadcastReciever 所以比較純,不會出問題。另外,這個是我的個人判斷,因為Widget還是和普通的app不同,我估計如果直接給 Widget傳送 Intent 又會受到限制,就像 handler的一樣,當(dāng)然這是我的猜測,但是感覺還是用 廣播靠譜
廣播的載體是Intent,但是他們的標(biāo)號則是Action。系統(tǒng)內(nèi)定了很多Action。
當(dāng)然我們也可以自己定義Intent 。 之需要 Intent("你自己定義的一個字符串")
接收方麻煩一些 需要 注冊
registerReceiver(intent, commandFilter);
第二個參數(shù)是Intent的過濾,而且不能為空。
如果是自己定義的Action 那還需要
- String action = intent.getAction();
- if (action.equals("自定定義的Action"))
- { 相應(yīng)的Intent的實例化 必須在這里進(jìn)行
- }
Σ Widget 使用 PendingIntent 是因為 沒有其他的方法了。說實話 AppWidget 就給我們一個 可以使用RemoteViews 的方法,別的都不能用。所以就順勢寫了一個SetPeningIntent 當(dāng)然這個方法也有很多固定的用法 ,啟動服務(wù),啟動活動 ,發(fā)送廣播,基本上該有的他都有了 。
3.最后再來說一下 Action 其實一個字符串但是這個字符串 因為很長所以基本上很少有人和其明明重合
他們就是來定義一些狀態(tài),還是航空狀態(tài),他的Action就是
ACTION_AIRPLANE_MODE_CHANGED
以上就是對Android傳值的相關(guān)介紹。