日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播

發(fā)布時間:2025/3/21 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前情提要(Previously)

本系列將使用 Android Studio 將《第一行代碼》(書中講解案例使用Eclipse)刷一遍,旨在為想入坑 Android 開發(fā),并選擇 Android Studio 作為開發(fā) IDE 的同學開路。
PS:其實我就是現(xiàn)學現(xiàn)賣,希望我能堅持刷完。

系列目錄在此:

  • Android Studio 單刷《第一行代碼》系列目錄

系統(tǒng)廣播

Android 內(nèi)置了很多系統(tǒng)級別的廣播,通過監(jiān)聽這些廣播可以得到相關(guān)的系統(tǒng)狀態(tài)信息。例如:

  • 系統(tǒng)啟動完成
  • 打開、關(guān)閉飛行模式
  • 電量低
  • 內(nèi)存不足
  • 網(wǎng)絡變化

動態(tài)注冊

下面是監(jiān)聽網(wǎng)絡變化的例子,新建一個 BroadcastTest 項目。

  • 在 MainActivity 中定義一個內(nèi)部類繼承自 BroadcastingReceiver,代碼如下:
class NetworkChangeReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show();} }
  • 在 onCreate() 方法中注冊,代碼如下:
private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);intentFilter = new IntentFilter();intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");networkChangeReceiver = new NetworkChangeReceiver();registerReceiver(networkChangeReceiver, intentFilter); }
  • 在 onDestroy() 方法中取消注冊,代碼如下:
@Override protected void onDestroy(){super.onDestroy();unregisterReceiver(networkChangeReceiver); }
  • OK,運行一下,會發(fā)現(xiàn)程序啟動時會彈出一個提示;按 Home 回到主界面,并嘗試開關(guān)網(wǎng)絡,會發(fā)現(xiàn)有提示彈出。

靜態(tài)注冊

下面是監(jiān)聽系統(tǒng)啟動的例子。

  • 在 MainActivity 中新建一個 public 類繼承自 BroadcastingReceiver,代碼如下:
public class BootCompleteReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "Boot complete", Toast.LENGTH_SHORT).show();} }
  • 在 AndroidManifest.xml 中靜態(tài)注冊,增加 receiver 代碼如下:
<receiver android:name=".MainActivity$BootCompleteReceiver"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED"/></intent-filter> </receiver>
  • 監(jiān)聽系統(tǒng)開機廣播需要權(quán)限,在 AndroidManifest.xml 中添加權(quán)限聲明,代碼如下:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
  • OK,運行程序,到設(shè)置 → 應用程序里找到我們的 Broadcast,點擊打開會看到程序擁有了開機啟動的權(quán)限。重啟機器或模擬器就可以收到開機廣播啦。

自定義廣播

下面是在程序中發(fā)送自定義廣播并接收的例子。

  • 在 MainActivity 中新建一個 MyBroadcastReceiver,代碼如下:
public static class MyBroadcastReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "received in MyBroadcastReceiver", Toast.LENGTH_SHORT).show();} }
  • 在 AndroidManifest.xml 中注冊,代碼如下:
<receiver android:name=".MainActivity$MyBroadcastReceiver"><intent-filter><action android:name="com.example.broadcasttest.MY_BROADCAST"/></intent-filter> </receiver>

讓 MyBroadcastReceiver 接收一條?com.example.broadcasttest.MY_BROADCAST?的廣播。

  • 給 MainActivity 增加一個按鈕,并在 onCreate() 方法中添加點擊事件,代碼如下:
Button button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.broadcasttest.MY_BROADCAST");sendBroadcast(intent);} });
  • OK,運行一下,點擊按鈕,就會收到我們發(fā)出的廣播。

本地廣播 LocalBroadcast

前面用到的都是全局廣播,可以被其他任何程序接收到,會引起一些安全性問題。下面是一個發(fā)送接收本地廣播的例子。

  • 定義一個 LocalReceiver ,代碼如下:
public static class LocalReceiver extends BroadcastReceiver{@Overridepublic void onReceive(Context context, Intent intent){Toast.makeText(context, "received local broadcast", Toast.LENGTH_SHORT).show();} }
  • 使用 LocalBroadcastManager 來注冊接收器、發(fā)送廣播,代碼如下:
private IntentFilter intentFilter; private LocalReceiver localReceiver; private LocalBroadcastManager localBroadcastManager;@Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);localBroadcastManager = localBroadcastManager.getInstance(this);Button button = (Button)findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent("com.example.broadcasttest.LOCAL_BROADCAST");localBroadcastManager.sendBroadcast(intent);}});intentFilter = new IntentFilter();intentFilter.addAction("com.example.broadcasttest.LOCAL_BROADCAST");localReceiver = new LocalReceiver();localBroadcastManager.registerReceiver(localReceiver, intentFilter); }
  • 別忘了取消注冊,代碼如下:
@Override protected void onDestroy(){super.onDestroy();localBroadcastManager.unregisterReceiver(localReceiver); }
  • OK,運行一下,點擊按鈕,就會接收到我們發(fā)出的本地廣播啦。

PS:本地廣播無法通過靜態(tài)注冊的方式接收。

?

盡管我試圖在本文中盡量完整的進行描述,但受限于篇幅和我的個人水平,本文難免有所遺漏,歡迎在評論中指出。
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!

關(guān)于作者(About Me)

addict

from:?https://www.cnblogs.com/DebugLife/p/4391160.html

總結(jié)

以上是生活随笔為你收集整理的Android Studio 单刷《第一行代码》系列 07 —— Broadcast 广播的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。