FMUSER更輕鬆地傳輸視頻和音頻!
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷蘭語
sq.fmuser.org ->阿爾巴尼亞人
ar.fmuser.org ->阿拉伯語
hy.fmuser.org - >亞美尼亞
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄羅斯語
bg.fmuser.org - >保加利亞
ca.fmuser.org ->加泰羅尼亞語
zh-CN.fmuser.org ->中文(簡體)
zh-TW.fmuser.org - >中國(繁體)
hr.fmuser.org ->克羅地亞語
cs.fmuser.org ->捷克
da.fmuser.org ->丹麥語
nl.fmuser.org - >荷蘭
et.fmuser.org ->愛沙尼亞語
tl.fmuser.org ->菲律賓
fi.fmuser.org ->芬蘭語
fr.fmuser.org - >法國
gl.fmuser.org ->加利西亞語
ka.fmuser.org ->喬治亞
de.fmuser.org ->德語
el.fmuser.org - >希臘
ht.fmuser.org ->海地克里奧爾語
iw.fmuser.org ->希伯來語
hi.fmuser.org ->印地語
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰島語
id.fmuser.org ->印尼語
ga.fmuser.org ->愛爾蘭
it.fmuser.org - >意大利
ja.fmuser.org ->日語
ko.fmuser.org ->韓文
lv.fmuser.org ->拉脫維亞
lt.fmuser.org - >立陶宛
mk.fmuser.org ->馬其頓語
ms.fmuser.org ->馬來語
mt.fmuser.org ->馬耳他語
no.fmuser.org - >挪威
fa.fmuser.org ->波斯語
pl.fmuser.org ->波蘭語
pt.fmuser.org ->葡萄牙語
ro.fmuser.org - >羅馬尼亞
ru.fmuser.org ->俄語
sr.fmuser.org ->塞爾維亞語
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亞
es.fmuser.org ->西班牙語
sw.fmuser.org ->斯瓦希里語
sv.fmuser.org ->瑞典語
th.fmuser.org - >泰國
tr.fmuser.org ->土耳其語
uk.fmuser.org ->烏克蘭語
ur.fmuser.org ->烏爾都語
vi.fmuser.org - >越南
cy.fmuser.org ->威爾士語
yi.fmuser.org - >意第緒語
廣播分為兩種不同的類型:“普通廣播”和“有序廣播”。 普通廣播是完全異步的,並且可以被所有廣播接收器同時(在邏輯上)接收。 消息傳遞的效率較高,但是缺點是接收者無法將處理結果傳遞給下一個接收者,並且無法終止。 廣播意圖傳播; 但是,有序廣播基於接收者聲明的優先級(在intent-filter元素的android:priority屬性中聲明,數字越大,優先級越高,值範圍:-1000到1000。它也是可能調用IntentFilter對象的setPriority()進行設置),收件人依次接收廣播。 例如,如果A的級別高於B的級別,並且B的級別高於C的級別,則廣播首先傳輸到A,然後傳輸到B,最後傳輸到C。可以在廣播中存儲數據。 當廣播發送到B時,B可以從廣播中獲取A所存儲的數據。
Context.sendBroadcast()
發送的是普通廣播,所有訂戶都有機會獲取和處理該廣播。
Context.sendOrderedBroadcast()
發送是有序廣播。 系統將根據接收方聲明的優先級一一執行接收方。 先前的接收者有權終止廣播(BroadcastReceiver.abortBroadcast())。 如果廣播被前一個接收者終止,則後者將無法再接收廣播。 對於有序廣播,前一個接收器可以將處理結果存儲在廣播Intent中,然後將其傳遞給下一個接收器。
廣播接收器(BroadcastReceiver)用於接收廣播Intent,並通過調用Context.sendBroadcast()和Context.sendOrderedBroadcast()來實現廣播Intent的發送。 通常,預訂此Intent的多個廣播接收器可以接收廣播Intent。 此功能類似於JMS中的主題消息接收器。 實現廣播接收器的方法如下:
第一步:定義廣播接收器,繼承BroadcastReceiver,然後重寫onReceive()方法。
公共類IncomingSMSReceiver extendedBroadcastReceiver {
@Override public void onReceive(Contextcontext,Intentintent){
}
}
步驟2:訂閱感興趣的廣播Intent,有兩種訂閱方法:
第一種類型:使用代碼進行訂閱(動態訂閱)
IntentFilter filter = newIntentFilter(“ android.provider.Telephony.SMS_RECEIVED”);
IncomingSMSReceiver接收者= newIncomingSMSReceiver();
registerReceiver(接收器,過濾器);
第二種類型:訂閱AndroidManifest.xml文件中的節點(靜態訂閱)
讓我們看一下動態廣播訂閱和靜態廣播訂閱之間的區別:
靜態訂閱廣播也稱為:常駐廣播。 當您的應用程序關閉時,如果有廣播消息,您編寫的廣播接收器也可以接收它。 在您的應用程序中,其註冊方法為AndroidManifast。 .xml進行訂閱。
動態訂閱廣播也稱為:非本地廣播。 當應用程序結束時,廣播自然會消失。 例如,您在活動的onCreate或onResume中訂閱廣播,並且必須在onDestory或onPause中取消廣播訂閱。 否則,將報告異常,因此您的廣播接收者將是非居民。
此處有一個更多的詳細信息,即這兩種訂閱方法。 發送廣播時,您需要注意:隱式意圖方法用於動態註冊,因此在發送廣播時需要使用隱式意圖進行發送。 ,否則廣播接收器將無法接收廣播。 注意這一點。 但是當進行靜態訂閱時,由於它是在AndroidMainfest.xml中訂閱的,因此可以在發送廣播時使用display Intent和隱式Intent(當然,這僅適用於我們自己定義的廣播接收器),因此以防萬一,我們通常使用隱式意圖發送廣播。
讓我們看一個例子:
看一下項目結構:
看一下靜態訂閱廣播:
包com.broadcast.demo;
導入android.app.Activity;
導入android.content.Intent;
導入android.os.Bundle;
導入android.view.View;
導入android.view.View.OnClickListener;
導入android.widget.Button;
導入com.example.androidbroadcastdemo.R;
/ **
*靜態訂閱廣播
* @作者weijiang204321
*
*/
公共類StaticRegisterBroadcastActivity擴展Activity {
@覆蓋
受保護的void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按鈕btn =(Button)findViewById(R.id.btn);
至
btn.setOnClickListener(new OnClickListener(){
@覆蓋
public void onClick(視圖v){
//使用靜態方式註冊廣播,可以使用顯示意圖發送廣播
意向廣播=新的Intent(“ com.broadcast.set.broadcast”);
sendBroadcast(broadcast,null);
}
至
});
}
至
}
在AndroidMainfest.xml中訂閱:
<清單 xmlns:android="http://schemas.android.com/apk/res/android"
package =“ com.example.androidbroadcastdemo”
android:versionCode =“ 1”
android:versionName =“ 1.0”>
<使用-sdk
android:minSdkVersion =“ 8”
android:targetSdkVersion =“ 18” />
<應用
android:allowBackup =“ true”
android:icon =“ @ drawable / ic_launcher”
android:label =“ @ string / app_name”
android:theme =“ @ style / AppTheme”>
<活動
android:name =“ com.broadcast.demo.StaticRegisterBroadcastActivity”
android:label =“ @ string / app_name”>
現在不用擔心其他內容,我們將在後面討論,這裡我們僅關注靜態廣播的註冊。
讓我們看一下廣播的接收者:
包com.broadcast.receiver;
導入android.content.BroadcastReceiver;
導入android.content.Context;
導入android.content.Intent;
導入android.util.Log;
/ **
*廣播接收器
* @作者weijiang204321
*
*/
公共類UnSortBroadcastReceiver擴展了BroadcastReceiver {
@覆蓋
public void onReceive(Context context,Intent intent){
Log.e(“ Intent_Action:”,intent.getAction()+“”);
}
}
廣播接收器中onReceive方法中的邏輯非常簡單,即打印Action的內容。
運行程序,結果很簡單,這裡沒有圖片。
讓我們看一下動態訂閱:
包com.broadcast.demo;
導入android.app.Activity;
導入android.content.Intent;
導入android.content.IntentFilter;
導入android.os.Bundle;
導入android.view.View;
導入android.view.View.OnClickListener;
導入android.widget.Button;
導入com.broadcast.receiver.UnSortBroadcastReceiver;
導入com.example.androidbroadcastdemo.R;
/ **
*使用動態方式註冊廣播
* @作者weijiang204321
*
*/
公共類DynamicRegisterBroadcastActivity擴展了Activity {
至
公共靜態最終字符串NEW_LIFEFORM_DETECTED =“ com.dxz.broadcasttest.NEW_LIFEFORM”;
受保護的UnSortBroadcastReceiver接收器;
至
@覆蓋
受保護的void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按鈕btn0 =(按鈕)findViewById(R.id.btn);
btn0.setOnClickListener(new OnClickListener(){
public void onClick(視圖v){
//發送廣播
意圖=新意圖(NEW_LIFEFORM_DETECTED);
sendBroadcast(it);
}
});
}
@覆蓋
受保護的void onResume(){
super.onResume();
//註冊播放
IntentFilter counterActionFilter = new IntentFilter(NEW_LIFEFORM_DETECTED);
接收器=新的UnSortBroadcastReceiver();
registerReceiver(receiver,counterActionFilter);
}
@覆蓋
受保護的void onPause(){
super.onPause();
//取消廣播
unregisterReceiver(receiver);
}
}
在這裡,我們訂閱onResume中的廣播,而取消訂閱onPause中的廣播。
在AndroidMainfest.xml中將啟動的Activity更改為DynamicRegisterBroadcastActivity。 其他內容無需修改。 運行程序並打印結果非常簡單,所以我在這裡看不到圖片。
讓我們看一下有序廣播和無序廣播
我們一開始就已經提到了這一點,讓我們看一下無序廣播:
首先,我們定義兩個廣播接收器:
第一個廣播接收器:
包com.broadcast.receiver;
導入android.content.BroadcastReceiver;
導入android.content.Context;
導入android.content.Intent;
導入android.util.Log;
/ **
*廣播接收器A
* @作者weijiang204321
*
*/
公共類SortBroadcastReceiverA擴展了BroadcastReceiver {
@覆蓋
public void onReceive(Context context,Intent intent){
Log.e(“ Demo:”,“廣播接收器A”);
}
}
第二個廣播接收器:
包com.broadcast.receiver;
導入android.content.BroadcastReceiver;
導入android.content.Context;
導入android.content.Intent;
導入android.util.Log;
/ **
*廣播接收器B
* @作者weijiang204321
*
*/
公共類SortBroadcastReceiverB擴展了BroadcastReceiver {
@覆蓋
public void onReceive(Context context,Intent intent){
Log.e(“ Demo:”,“ Broadcast B”);
}
至
至
}
訂閱以在AndroidMainfest.xml中廣播
操作結果:
運行結果有點奇怪。 為什麼接收機B在前面,接收機A在後面? 原因是,當我們在AndroidMainfest.xml中訂閱廣播時,我們在intent-filter中設置了android:priority屬性值。 值越大,優先級越高。 ,接收方B的優先級為1000,接收方A的優先級為999,因此B先接收廣播,然後A接收廣播,但是接收方B與接收方A之間沒有連接,並且無法進行交互是,因為這是亂序的廣播並且是異步的,所以我們可以通過在B中的onReceiver方法中添加代碼來進行實驗:
abortBroadcast(); //終止此廣播的傳輸
操作結果:
我們可以看到提示錯誤,即不允許無序廣播終止廣播。 實際上,終止是沒有用的,因為接收方A仍接收廣播。
讓我們看一下有序廣播,需要修改代碼:
首先是在發送廣播時:
意向廣播=新的Intent(“ com.broadcast.set.broadcast”);
sendOrderedBroadcast(broadcast,null);
然後添加一種方法來終止B接收器中的廣播:
abortBroadcast();
其他代碼不需要修改,操作結果為:
僅存在接收方B,接收方A不接收廣播,因為廣播在接收方B中終止,隨後的接收方無法接受。
修改下面的代碼:
收件人B:
包com.broadcast.receiver;
導入android.content.BroadcastReceiver;
導入android.content.Context;
導入android.content.Intent;
導入android.os.Bundle;
導入android.util.Log;
/ **
*廣播接收器B
* @作者weijiang204321
*
*/
公共類SortBroadcastReceiverB擴展了BroadcastReceiver {
@覆蓋
public void onReceive(Context context,Intent intent){
Log.e(“ Demo:”,“廣播接收器B”);
Bundle bundle = new Bundle();
bundle.putString(“ next_receiver”,“下一個廣播接收器”);
setResultExtras(bundle);
}
至
}
B收到廣播後,它將存儲一些值並將其傳遞給下一個接收器。
接收方A的代碼:
包com.broadcast.receive
我們的其他產品:
|
||
|
輸入電子郵件以獲取驚喜
es.fmuser.org
it.fmuser.org
fr.fmuser.org
de.fmuser.org
af.fmuser.org ->荷蘭語
sq.fmuser.org ->阿爾巴尼亞人
ar.fmuser.org ->阿拉伯語
hy.fmuser.org - >亞美尼亞
az.fmuser.org ->阿塞拜疆
eu.fmuser.org ->巴斯克
be.fmuser.org ->白俄羅斯語
bg.fmuser.org - >保加利亞
ca.fmuser.org ->加泰羅尼亞語
zh-CN.fmuser.org ->中文(簡體)
zh-TW.fmuser.org - >中國(繁體)
hr.fmuser.org ->克羅地亞語
cs.fmuser.org ->捷克
da.fmuser.org ->丹麥語
nl.fmuser.org - >荷蘭
et.fmuser.org ->愛沙尼亞語
tl.fmuser.org ->菲律賓
fi.fmuser.org ->芬蘭語
fr.fmuser.org - >法國
gl.fmuser.org ->加利西亞語
ka.fmuser.org ->喬治亞
de.fmuser.org ->德語
el.fmuser.org - >希臘
ht.fmuser.org ->海地克里奧爾語
iw.fmuser.org ->希伯來語
hi.fmuser.org ->印地語
hu.fmuser.org - >匈牙利
is.fmuser.org ->冰島語
id.fmuser.org ->印尼語
ga.fmuser.org ->愛爾蘭
it.fmuser.org - >意大利
ja.fmuser.org ->日語
ko.fmuser.org ->韓文
lv.fmuser.org ->拉脫維亞
lt.fmuser.org - >立陶宛
mk.fmuser.org ->馬其頓語
ms.fmuser.org ->馬來語
mt.fmuser.org ->馬耳他語
no.fmuser.org - >挪威
fa.fmuser.org ->波斯語
pl.fmuser.org ->波蘭語
pt.fmuser.org ->葡萄牙語
ro.fmuser.org - >羅馬尼亞
ru.fmuser.org ->俄語
sr.fmuser.org ->塞爾維亞語
sk.fmuser.org ->斯洛伐克
sl.fmuser.org - >斯洛文尼亞
es.fmuser.org ->西班牙語
sw.fmuser.org ->斯瓦希里語
sv.fmuser.org ->瑞典語
th.fmuser.org - >泰國
tr.fmuser.org ->土耳其語
uk.fmuser.org ->烏克蘭語
ur.fmuser.org ->烏爾都語
vi.fmuser.org - >越南
cy.fmuser.org ->威爾士語
yi.fmuser.org - >意第緒語
FMUSER更輕鬆地傳輸視頻和音頻!
聯絡我們
分類
電子通訊