Android四大組件之廣播BroadcastReceiver詳解
定義
BroadcastReceiver,“廣播接收者”的意思,顧名思義,它就是用來接收來自系統和應用中的廣播。在Android系統中,廣播體現在方方面面,例如當開機完成後系統會產生一條廣播,接收到這條廣播就能實現開機啟動服務的功能;當網絡狀態改變時系統會產生一條廣播,接收到這條廣播就能及時地做出提示和保存數據等操作;當電池電量改變時,系統會產生一條廣播,接收到這條廣播就能在電量低時告知用戶及時保存進度等等。Android中的廣播機制設計的非常出色,很多事情原本需要開發者親自操作的,現在隻需等待廣播告知自己就可以瞭,大大減少瞭開發的工作量和開發周期。而作為應用開發者,就需要數練掌握Android系統提供的一個開發利器,那就是BroadcastReceiver。
在我們詳細分析創建BroadcastReceiver的兩種註冊方式前,我們先羅列本次分析的大綱:
(1)對靜態和動態兩種註冊方式進行概念闡述以及演示實現步驟
(2)簡述兩種BroadcastReceiver的類型(為後續註冊方式的對比做準備)
(3)在默認廣播類型下設置優先級和無優先級情況下兩種註冊方式的比較
(4)在有序廣播類型下兩種註冊方式的比較
(5)通過接受打電話的廣播,在程序(Activity)運行時和終止運行時,對兩種註冊方式的比較
(6)總結兩種方式的特點
一、靜態和動態註冊方式
? 構建Intent,使用sendBroadcast方法發出廣播定義一個廣播接收器,該廣播接收器繼承BroadcastReceiver,並且覆蓋onReceive()方法來響應事件註冊該廣播接收器,我們可以在代碼中註冊(動態註冊),也可以AndroidManifest.xml配置文件中註冊(靜態註冊)。
案例解析:
1.主界面設計
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/btnSend" android:layout_width="match_parent" android:layout_height="wrap_content" android:insetTop="16dp" android:text="發松" /> </LinearLayout>
如圖:
2.後臺代碼設計
package com.aaa.btdemo02; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { //定義對象;村長:一樣權威,光輝的存在,拿著大喇叭,講話; Button btnSend; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //取值 btnSend=(Button) findViewById(R.id.btnSend); //這對這個按鈕做監聽事件;發送信息,大喇叭... btnSend.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(); //設置intent的動作;後面字符串是自定義的 intent.setAction("android.intent.action.receiverdata"); intent.putExtra("msg","羊村各位村民開會瞭"); MainActivity.this.sendBroadcast(intent); } }); } }
3.創建自己的廣播接收器類
package com.aaa.btdemo02; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.text.TextUtils; import android.util.Log; public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //接受廣播 if(intent==null)return; //intent:接受從主端傳遞過來的數據,action數據; String action=intent.getAction(); //針對上述做判斷;第一個判斷是否為空也可以寫成action.isEmpty if(!TextUtils.isEmpty(action)&&"android.intent.action.receiverdata".equals(action)){ String msg=intent.getStringExtra("msg");//不習慣可以使用Bundle Log.i("喜洋洋-->",msg); } } }
4.註冊廣播
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.aaa.btdemo02"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Btdemo02"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MyReceiver" android:exported="true"> <intent-filter> <!-- 自定義的action名 --> <action android:name="android.intent.action.receiverdata"/> </intent-filter> </receiver> </application> </manifest>
5.運行效果
在這裡插入圖片描述
到此這篇關於Android四大組件之廣播BroadcastReceiver詳解的文章就介紹到這瞭,更多相關Android 四大組件內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- BroadcastReceiver靜態註冊案例詳解
- Android進程間使用Intent進行通信
- Android四大組件之Activity詳細介紹
- Android中Intent組件的入門學習心得
- Android廣播實現App開機自啟動