Android入門之動(dòng)態(tài)BroadCast的使用教程
BroadCast是什么
BroadcastReceiver就是應(yīng)用程序間的全局大喇叭,即通信的一個(gè)手段, 系統(tǒng)自己在很多時(shí)候都會(huì)發(fā)送廣播,比如電量低或者充足,剛啟動(dòng)完,插入耳機(jī),你有一條新的微信消息。。。這種都是使用BroadCast機(jī)制去實(shí)現(xiàn)的。
BroadCast分為靜態(tài)和動(dòng)態(tài)BroadCast兩種。它們的區(qū)別是:
- 動(dòng)態(tài)BroadCast是運(yùn)行時(shí)發(fā)生的,它只有發(fā)生在APP運(yùn)行后;
- 那么有一種消息如:開(kāi)機(jī)監(jiān)聽(tīng)、全局監(jiān)聽(tīng)、無(wú)activity承載彈窗在開(kāi)機(jī)時(shí)APP沒(méi)有運(yùn)行前告知你天氣要變化了這種消息,這種消息就是用的“靜態(tài)BroadCast“;
我們今天先從動(dòng)態(tài)BroadCast入手。從今天開(kāi)始我們后面很多教程都涉及到有一樣?xùn)|西即:Android權(quán)限。
對(duì)于Android權(quán)限,這一塊知識(shí)比較零碎。而且在不同的Android版本間還有巨大的差異。主要分為:
- Android 6以前版本
- Android 6-10
- Android 10以后
每個(gè)sdk版本對(duì)權(quán)限的調(diào)用、配置還各不相同,我們就見(jiàn)招折招吧。
動(dòng)態(tài)Broad Cast演示例子
今天我們來(lái)做的例子是一個(gè)在應(yīng)用啟動(dòng)后如果網(wǎng)絡(luò)信號(hào)發(fā)生斷/連后及時(shí)廣播相應(yīng)的消息給到應(yīng)用的Activity。如下圖:
- 在模擬器里用鼠標(biāo)拖著屏幕的頂部黑框下一點(diǎn)然后按住鼠標(biāo)不動(dòng)往下拖動(dòng),就會(huì)出現(xiàn)一些“常用設(shè)置”。
- 在設(shè)置里里對(duì)著網(wǎng)絡(luò)信號(hào)開(kāi)關(guān)作開(kāi)/關(guān)操作
- 你可以看到下方有浮動(dòng)的Toast顯示“網(wǎng)絡(luò)狀態(tài)發(fā)生改變”

圍繞例子進(jìn)行設(shè)計(jì)
1.我們寫(xiě)動(dòng)態(tài)BroadCast,需要讓一個(gè)Java類繼承自:android.content.BroadcastReceiver;
2.覆寫(xiě)public void onReceive(Context context, Intent intent)方法,這個(gè)方法就是收到BroadCast后的處理邏輯所在了;
3.一定要記得把這個(gè)自己寫(xiě)的receiver注冊(cè)到:AndroidManifest.xml文件中去。當(dāng)然,你可以使用Android Studio的new->other->BroadCast Receiver來(lái)生成這個(gè)Receiver,它會(huì)自動(dòng)幫你把這個(gè)Receiver的類注冊(cè)到AndroidManifest.xml文件中去;
4.然后在Activity啟動(dòng)使IntentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE")添加應(yīng)用對(duì)網(wǎng)絡(luò)狀態(tài)監(jiān)聽(tīng)情況;
來(lái)看全代碼吧。
全代碼
Receiver在AndroidManifest中的注冊(cè)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DemoDynamicBroadCast"
tools:targetApi="31">
<receiver
android:name=".SimpleBroadCast"
android:enabled="true"
android:exported="true"></receiver>
<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>
<meta-data
android:name="android.app.lib_name"
android:value="" />
</activity>
</application>
</manifest>Receiver-SimpleBroadCast
package org.mk.android.demo.broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class SimpleBroadCast extends BroadcastReceiver {
private final static String TAG="DemoDynamicBroadCast";
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context,"網(wǎng)絡(luò)狀態(tài)發(fā)生改變~",Toast.LENGTH_SHORT).show();
Log.i(TAG,">>>>>>網(wǎng)絡(luò)狀態(tài)發(fā)生改變");
}
}這個(gè)Receiver很簡(jiǎn)單,就是在onReceive方法中輸出一個(gè)Toast。
再來(lái)看activity端。
MainActivity
package org.mk.android.demo.broadcast;
import androidx.appcompat.app.AppCompatActivity;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
SimpleBroadCast simpleBroadCast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//核心部分代碼:
simpleBroadCast = new SimpleBroadCast();
IntentFilter itFilter = new IntentFilter();
itFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(simpleBroadCast, itFilter);
}
//別忘了將廣播取消掉哦~
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(simpleBroadCast);
}
}運(yùn)行后的效果
以下是運(yùn)行后的效果

到此這篇關(guān)于Android入門之動(dòng)態(tài)BroadCast的使用教程的文章就介紹到這了,更多相關(guān)Android動(dòng)態(tài)BroadCast內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用WEB工具快速提高Android開(kāi)發(fā)效率
正所謂工欲善其事,必先利其器。學(xué)習(xí)并應(yīng)用優(yōu)秀的輪子,可以讓我們跑的更快,走的更遠(yuǎn)。這里所指的工具是廣義的,泛指能幫助我們開(kāi)發(fā)的東西,或者能提高我們效率的東西,包括:開(kāi)發(fā)工具,監(jiān)測(cè)工具,第三方代碼庫(kù)等2016-02-02
Android 動(dòng)態(tài)改變布局實(shí)例詳解
這篇文章主要介紹了Android 動(dòng)態(tài)改變布局實(shí)例詳解的相關(guān)資料,這里舉例說(shuō)明如何實(shí)現(xiàn)動(dòng)態(tài)改變布局的例子,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11
Android自定義控件實(shí)現(xiàn)萬(wàn)能的對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)萬(wàn)能對(duì)話框的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Adapter實(shí)現(xiàn)ListView帶多選框等狀態(tài)的自定義控件的注意事項(xiàng)
Android本身為L(zhǎng)istView提供了幾個(gè)方便的Adapter,比如ArrayAdapter、SimpleCurrentAdapter等等,接下來(lái)介紹自定義Adapter實(shí)現(xiàn)ListView帶多選框等狀態(tài)控件的注意事項(xiàng),感興趣的朋友可以詳細(xì)了解下,或許對(duì)你有所幫助2013-01-01
android 獲取手機(jī)內(nèi)存及 內(nèi)存可用空間的方法
下面小編就為大家?guī)?lái)一篇android 獲取手機(jī)內(nèi)存及SD卡內(nèi)存可用空間的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03

