日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

android 静态注册wifi广播,Android中BroadcastReceiver详解

發布時間:2024/9/30 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 静态注册wifi广播,Android中BroadcastReceiver详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

BroadcastReceiver是什么?

Android app可以發送廣播也可以接收系統或者其它app發送的廣播,是發送/訂閱的設計模式。這些廣播被發送當重要的事件發生的時候。例如,安卓系統發送廣播當各種各樣系統事件發生的時候,比如手機啟動了或者手機開始充電了。應用也可以發送自定義廣播,例如通知其它應用一些他們可能感興趣的東西,比如一些新的內容被下載了。

系統廣播會在系統事件發生的時候被發送出來,比如當手機進入或者退出開發者選項的時候,所有訂閱了系統廣播的人都可以收到這個廣播。

廣播它自身是被包裹在了一個Intent里面,它是有一個唯一的標識的(例如android.intent.action.AIRPLANE_MODE)。這個Intent對象同時包含了一些其它的信息,在它的字段里面,飛行模式這個intent里面就包含了一個boolean的字段來表示飛行模式是開啟還是關閉的。

BroadcastReceiver能用來做什么?

接收系統發送出的重要的廣播(網絡變化,開機,充電)

app之間相互通信,相互拉活的手段

app內部組建間通信的手段

BroadcastReceiver分為哪幾類?

從不同的緯度區分,可能分為不同的類別。

系統廣播/非系統廣播

全局廣播/本地廣播

無序廣播/有序廣播/粘性廣播

BroadcastReceiver怎么使用?

1. 注冊廣播

1.1 靜態注冊廣播

1.2 動態注冊廣播

val br: BroadcastReceiver = MyBroadcastReceiver()

val filter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION).apply {

addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED)

}

registerReceiver(br, filter)

2. 發送廣播

Intent().also { intent ->

intent.setAction("com.example.broadcast.MY_NOTIFICATION")

intent.putExtra("data", "Notice me senpai!")

sendBroadcast(intent)

}

sendBroadcast(Intent("com.example.NOTIFY"), Manifest.permission.SEND_SMS)

3. 接收廣播

private const val TAG = "MyBroadcastReceiver"

class MyBroadcastReceiver : BroadcastReceiver() {

override fun onReceive(context: Context, intent: Intent) {

StringBuilder().apply {

append("Action: ${intent.action}\n")

append("URI: ${intent.toUri(Intent.URI_INTENT_SCHEME)}\n")

toString().also { log ->

Log.d(TAG, log)

Toast.makeText(context, log, Toast.LENGTH_LONG).show()

}

}

}

}

android:permission="android.permission.SEND_SMS">

var filter = IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED)

registerReceiver(receiver, filter, Manifest.permission.SEND_SMS, null )

BroadcastReceiver在不同版本的API中有哪些區別?

Android 9

從Android 9(API level 28)開始,NETWORK_STATE_CHANGED_ACTION廣播不會攜帶用戶的地理位置信息或者個人身份數據。 此外,當你的app運行在Android 9或者更高的手機上,系統的wifi廣播也不會攜帶SSIDs, BSSIDs,連接信息或掃描結果。想獲取以上信息,需要通過getConnectionInfo()來代替。

Android 8

從Android 8(API level 27)開始,系統加強了對靜態廣播的進一步限制,許多廣播靜態注冊了也是收不到的,不過你可以采用動態注冊的方式來接收這些廣播。

Android 7

從Android 7(API level 24)開始,系統不會再發送ACTION_NEW_PICTURE,ACTION_NEW_VIDEO的廣播。 同時從7.0開始app想要接受CONNECTIVITY_ACTION廣播,需要通過動態注冊廣播的形式了,再通過靜態廣播注冊的方式是不可以的了。

BroadcastReceiver發送廣播和接收廣播是怎樣工作的?

看圖吧,畫了一幅圖

BroadcastReceiver是怎么引發ANR的?

眾所周知廣播是會造成ANR的,造成ANR就是因為發送方將廣播發送給AMS,然后AMS找有沒有人注冊,找到之后讓它去執行,在執行開始之前AMS就開始為ANR進行耗時統計了,如果這個時候app進程已經存在,那么便把這個消息加入到消息隊列中,等待調度,最后執行完成。如果app不存在,AMS會拉活我們的進程,然后我們的app會執行這個消息,所以如果我們被廣播拉活,我們的啟動時長也是會被統計到ANR的時間范圍內的。 今年年初我花一個月的時間收錄整理了一套知識體系,如果有想法深入的系統化的去學習的,可以點擊傳送門,我會把我收錄整理的資料都送給大家,幫助大家更快的進階。

總結

以上是生活随笔為你收集整理的android 静态注册wifi广播,Android中BroadcastReceiver详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。