Android基礎(chǔ)知識之broadcast廣播詳解
Android中的廣播用的太多了,今天稍微總結(jié)一下。
按注冊方式分為兩種:
1.靜態(tài)注冊廣播:
靜態(tài)注冊廣播就是在androidManifest.xml文件中注冊廣播,假設(shè)我們要實現(xiàn)這樣一個效果,在一個activity上點擊按鈕,發(fā)送一條廣播,這條廣播彈出一個toast,顯示“靜態(tài)”二字。
先看看廣播接受者:
public class MyBroadcast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Toast.makeText(context,"靜態(tài)", Toast.LENGTH_LONG).show(); } }
清單文件中注冊:
<receiver android:name="com.example.staticbroadcast.MyBroadcast" > <intent-filter> <action android:name="com.test.StaticBroadcast" /> </intent-filter> </receiver>
activity中的點擊事件(發(fā)送廣播):
this.static_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction("com.test.StaticBroadcast"); sendBroadcast(intent); } });
2.動態(tài)注冊:
動態(tài)注冊一般是在activity中的onStart()方法中注冊,在onStop()方法中解除注冊,代碼如下:
public class MainActivity extends Activity { private Button static_btn; private Button dynamic_btn; private BroadcastReceiver myBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.static_btn = (Button) this.findViewById(R.id.button1); this.dynamic_btn = (Button) this.findViewById(R.id.Button01); myBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { Toast.makeText(MainActivity.this,"你好,這里是動態(tài)廣播!", Toast.LENGTH_LONG).show(); } }; // this.static_btn.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // Intent intent = new Intent(); // intent.setAction("com.test.StaticBroadcast"); // sendBroadcast(intent); // } // }); this.dynamic_btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //發(fā)送廣播 Intent intent = new Intent(); intent.setAction("DynamicBroadcast"); sendBroadcast(intent); } }); } @Override protected void onStart() { super.onStart(); //注冊廣播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("DynamicBroadcast"); registerReceiver(myBroadcastReceiver, intentFilter); } @Override protected void onStop() { super.onStop(); //取消注冊 unregisterReceiver(myBroadcastReceiver); } }
關(guān)于靜態(tài)注冊的細(xì)節(jié):
android:exported=”true”這個屬性表示該廣播接收器是否接收來自其他App發(fā)出的廣播,如果有intent-filter屬性,則默認(rèn)為true,否則默認(rèn)為false。
每個廣播接收者都可以接受多個廣播源,如果是靜態(tài)注冊,那么你要這么做:
<receiver android:exported="true" android:name="com.example.staticbroadcast.MyBroadcast" > <intent-filter> <action android:name="com.test.StaticBroadcast" /> <action android:name="com.test.StaticBroadcast2"/> </intent-filter> </receiver>
在廣播接收器中這樣處理:
@Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("com.test.StaticBroadcast")) { Toast.makeText(context, "靜態(tài)", Toast.LENGTH_SHORT).show(); } else if (intent.getAction().equals("com.test.StaticBroadcast2")) { Toast.makeText(context, "靜態(tài)2", Toast.LENGTH_SHORT).show(); } }
如果是動態(tài)注冊,注冊方式如下:
@Override protected void onStart() { super.onStart(); //注冊廣播 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("DynamicBroadcast"); intentFilter.addAction("DynamicBroadcast2"); registerReceiver(myBroadcastReceiver, intentFilter); }
廣播接收器中的處理方式與靜態(tài)注冊一致。
關(guān)于怎樣使用broadcast實現(xiàn)activity和fragment之間的通信可以查看我的另一篇博客使用Broadcast實現(xiàn)android組件之間的通信
原文地址:http://blog.csdn.net/u012702547/article/details/46955787
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android中BroadcastReceiver(異步接收廣播Intent)的使用
- Android提高之BroadcastReceiver實例詳解
- 深入Android中BroadcastReceiver的兩種注冊方式(靜態(tài)和動態(tài))詳解
- Android編程四大組件之BroadcastReceiver(廣播接收者)用法實例
- Android中的廣播(BroadCast)詳細(xì)介紹
- Android查看電池電量的方法(基于BroadcastReceiver)
- Android使用廣播(BroadCast)實現(xiàn)強制下線的方法
- Android實現(xiàn)Activity、Service與Broadcaster三大組件之間互相調(diào)用的方法詳解
- Android開發(fā)之BroadcastReceiver用法實例分析
- Android學(xué)習(xí)之Broadcast的簡單使用
相關(guān)文章
零基礎(chǔ)學(xué)習(xí)教程之Linux下搭建android開發(fā)環(huán)境
這篇文章主要介紹了Linux下搭建android開發(fā)環(huán)境,特別適合零基礎(chǔ)的同學(xué)學(xué)習(xí),想要在Linux及ubuntu11.10下配置android4.0.3開發(fā)環(huán)境的朋友可以參考一下2015-12-12android多媒體音樂(MediaPlayer)播放器制作代碼
這篇文章主要為大家詳細(xì)介紹了android多媒體音樂(MediaPlayer)播放器的制作相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android Jetpack組件之ViewModel使用詳解
Android中的ViewModel是一個可以用來存儲UI相關(guān)的數(shù)據(jù)的類。ViewModel的生命周期會比創(chuàng)建它的Activity、Fragment的生命周期長,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-04-04Android MVVM架構(gòu)實現(xiàn)RecyclerView列表詳解流程
MVVM是Model-View-ViewModel的簡寫。它本質(zhì)上就是MVC 的改進(jìn)版。MVVM 就是將其中的View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開2021-10-10Android基于TextView實現(xiàn)的跑馬燈效果實例
這篇文章主要介紹了Android基于TextView實現(xiàn)的跑馬燈效果,以完整實例形式分析了Android使用TextView通過屬性設(shè)置及功能代碼實現(xiàn)跑馬燈效果的相關(guān)技巧,需要的朋友可以參考下2016-02-02Android 中SwipeRefreshLayout與ViewPager滑動事件沖突解決方法
這篇文章主要介紹了Android 中SwipeRefreshLayout與ViewPager滑動事件沖突解決方法的相關(guān)資料,需要的朋友可以參考下2017-04-04Android自定義view實現(xiàn)帶header和footer的Layout
這篇文章主要介紹了Android自定義view實現(xiàn)帶header和footer的Layout,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-02-02