国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何監(jiān)測Android網(wǎng)絡(luò)類型:5G/4G/3G/2G能力

這篇具有很好參考價(jià)值的文章主要介紹了如何監(jiān)測Android網(wǎng)絡(luò)類型:5G/4G/3G/2G能力。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

如何監(jiān)測Android網(wǎng)絡(luò)類型:5G/4G/3G/2G能力

如何監(jiān)測Android網(wǎng)絡(luò)類型:5G/4G/3G/2G能力
App可以通過了解所連接的網(wǎng)絡(luò)類型來獲益,例如啟用某些功能需要5G提供的帶寬和低延遲。如果只有2G或3G網(wǎng)絡(luò)可用,加載時(shí)間會(huì)比較慢,因此我們可以對加載時(shí)間有一定的預(yù)期。

在這里,我們可以利用TelephonyManager類來獲取各種關(guān)于移動(dòng)網(wǎng)絡(luò)狀態(tài)的信息,其中包括網(wǎng)絡(luò)類型!不過,使用TelephonyManager相當(dāng)復(fù)雜,因?yàn)椴煌腁ndroid版本有不同的情況需要考慮。

下面我提供了一個(gè)示例應(yīng)用程序,它可以檢測我們所連接的移動(dòng)網(wǎng)絡(luò)類型,不僅僅是5G / 4G / 3G / 2G,還可以獲取到具體的子類型。該應(yīng)用使用了TelephonyManager,并結(jié)合了Jetpack Compose、ViewModel和Kotlin Flow的編寫方式。

https://github.com/tdcolvin/NetworkTypeDetector文章來源地址http://www.zghlxwxcb.cn/news/detail-501301.html

使用TelephonyManager注冊以接收網(wǎng)絡(luò)信息更新

獲取TelephonyManager的方法如下:

val telephonyManager =
  context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager

…當(dāng)上下文是一個(gè)Context實(shí)例時(shí)。請注意,一些手機(jī)具有多個(gè)SIM卡;如果您想查詢特定的SIM卡,請調(diào)用TelephonyManager實(shí)例上的.createForSubscriptionId(simCardNumber)。

使用這個(gè)實(shí)例,我們現(xiàn)在可以獲取網(wǎng)絡(luò)信息更新。所使用的過程取決于Android版本,即用戶的Android版本,而不是您應(yīng)用的目標(biāo)API級別。

Android ≥ 12(API ≥ 31)

Android 12及更高版本是最簡單的情況,因?yàn)橛幸粋€(gè)專用的監(jiān)聽器,并且不需要權(quán)限。

要注冊接收網(wǎng)絡(luò)類型信息,我們使用registerTelephonyCallback(Executor, TelephonyCallback)方法,如下所示:

// The thread Executor used to run the listener. This governs how threads are created and
// reused. Here we use a single thread.
val exec = Executors.newSingleThreadExecutor()

// Create the callback object
val callback = object : TelephonyCallback(), TelephonyCallback.DisplayInfoListener {
    override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
        //TODO: This is next
    }
}

// Finally, register the callback so it can start receiving results.
telephonyManager.registerTelephonyCallback(exec, callback)

注銷監(jiān)聽器,方法如下:

telephonyManager.unregisterTelephonyCallback(callback)

“”"

僅限 Android 11 (API 30)

注冊電話管理器回調(diào)的原始方法是使用 listen 方法。該方法接受各種類型的監(jiān)聽器;我們需要的是實(shí)現(xiàn) onDisplayInfoChanged 接口的監(jiān)聽器。

有趣的是,這個(gè)方法在一個(gè) Android 版本中就出現(xiàn)并消失了:
如何監(jiān)測Android網(wǎng)絡(luò)類型:5G/4G/3G/2G能力

這需要 READ_PHONE_STATE 權(quán)限。我們將在 UI 代碼中稍后處理。現(xiàn)在我們將繼續(xù),假定我們已經(jīng)擁有該權(quán)限。

// (At the top of the file)
@file:Suppress("DEPRECATION") //Suppressed as required to support old version

// SDK 30 uses TelephonyManager.listen() to listen for TelephonyDisplayInfo changes.
// It requires READ_PHONE_STATE permission.

@Suppress("OVERRIDE_DEPRECATION")  //Suppressed as required to support old version
// This is the object that will receive the results
val callback = object : PhoneStateListener(exec) {
    override fun onDisplayInfoChanged(telephonyDisplayInfo: TelephonyDisplayInfo) {
        //TODO: This is next
    }
}

// Start listening for results
telephonyManager.listen(callback, PhoneStateListener.LISTEN_DISPLAY_INFO_CHANGED)

注銷監(jiān)聽使用下面代碼:

telephonyManager.listen(callback, 0)

Android ≥ 7(API ≥ 24)

Android 10及以下沒有任何監(jiān)聽網(wǎng)絡(luò)類型變化的方法。要支持較舊的版本,您需要實(shí)施一個(gè)循環(huán),每隔幾秒主動(dòng)檢查。

檢查的代碼如下:

val networkType = telephonyManager.dataNetworkType

這需要 READ_PHONE_STATE 權(quán)限。

請注意,Android 10及以下版本不能支持5G,因?yàn)?G僅在Android 11及以上版本中可用。

返回的值:網(wǎng)絡(luò)類型常量

在上述 Android 11 和 ≥12 的代碼中,會(huì)收到一個(gè)帶有TelephonyDisplayInfo對象的回調(diào)。該對象包含一個(gè) networkType 和一個(gè) overrideNetworkType。而在 Android ≤10 的代碼中,只會(huì)收到一個(gè) networkType。

無論哪種情況,networkType 可以是以下之一:

val baseTypeString = when(networkType) {
    TelephonyManager.NETWORK_TYPE_CDMA -> "CDMA"
    TelephonyManager.NETWORK_TYPE_1xRTT -> "1xRTT"
    TelephonyManager.NETWORK_TYPE_EDGE -> "EDGE"
    TelephonyManager.NETWORK_TYPE_EHRPD -> "eHRPD"
    TelephonyManager.NETWORK_TYPE_EVDO_0 -> "EVDO rev 0"
    TelephonyManager.NETWORK_TYPE_EVDO_A -> "EVDO rev A"
    TelephonyManager.NETWORK_TYPE_EVDO_B -> "EVDO rev B"
    TelephonyManager.NETWORK_TYPE_GPRS -> "GPRS"
    TelephonyManager.NETWORK_TYPE_GSM -> "GSM"
    TelephonyManager.NETWORK_TYPE_HSDPA -> "HSDPA"
    TelephonyManager.NETWORK_TYPE_HSPA -> "HSPA"
    TelephonyManager.NETWORK_TYPE_HSPAP -> "HSPA+"
    TelephonyManager.NETWORK_TYPE_HSUPA -> "HSUPA"
    TelephonyManager.NETWORK_TYPE_IDEN -> "iDen"
    TelephonyManager.NETWORK_TYPE_IWLAN -> "IWLAN"
    TelephonyManager.NETWORK_TYPE_LTE -> "LTE"
    TelephonyManager.NETWORK_TYPE_NR -> "NR (new radio) 5G"
    TelephonyManager.NETWORK_TYPE_TD_SCDMA -> "TD_SCDMA"
    TelephonyManager.NETWORK_TYPE_UMTS -> "UMTS"
    else -> "[Unknown]"
}

如果可用,overrideNetworkType會(huì)為某些類型的4G和5G連接提供更多信息。以下是選項(xiàng):

val overrideString = when(overrideNetworkType) {
    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA -> "5G non-standalone"
    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED -> "5G standalone (advanced)"
    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_ADVANCED_PRO -> "LTE Advanced Pro (5Ge)"
    TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_LTE_CA -> "LTE (carrier aggregation)"
    else -> null
}

可能的null處理:

val netTypeString = overrideString ?: baseTypeString

將其構(gòu)建為一個(gè)Kotlin + Flows + ViewModel + Compose應(yīng)用程序

我在ViewModel中使用了一個(gè)Kotlin callbackFlow來設(shè)置上述監(jiān)聽器。如果您以前沒有遇到過callbackFlow,那就太棒了:它是一個(gè)流,可用于在外部API上創(chuàng)建一個(gè)監(jiān)聽器,當(dāng)有人注冊時(shí),自動(dòng)移除該監(jiān)聽器。

我使用.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), null)callbackFlow從冷可觀察對象轉(zhuǎn)換為共享熱可觀察對象。這樣,如果有多個(gè)消費(fèi)者注冊,就不會(huì)創(chuàng)建多個(gè)DisplayInfoListenersPhoneStateListeners。WhileSubscribed(5000)部分確??捎^察對象在所有消費(fèi)者消失后仍保持存在一段時(shí)間,以防它們即將重新出現(xiàn)。(例如,在屏幕旋轉(zhuǎn)的情況下會(huì)發(fā)生這種情況)。

在Composable中,我使用collectAsStateWithLifecycle()來確保監(jiān)聽器僅在應(yīng)用程序位于前臺(tái)時(shí)處于活動(dòng)狀態(tài)。

GitHub

https://github.com/tdcolvin/NetworkTypeDetector

到了這里,關(guān)于如何監(jiān)測Android網(wǎng)絡(luò)類型:5G/4G/3G/2G能力的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 安卓手機(jī)4G/5G網(wǎng)絡(luò)數(shù)據(jù)流量(非WiFi)設(shè)置加密DNS

    安卓手機(jī)4G/5G網(wǎng)絡(luò)數(shù)據(jù)流量(非WiFi)設(shè)置加密DNS

    說真的,DNS這玩意用的也不少,不管是域名解析,還是網(wǎng)絡(luò)設(shè)置,都會(huì)涉及到 DNS 解析,但是一直停留在 IP 地址階段,也就是直接輸入 DNS 的 IP 地址即可。 最近重新搭建了最新的 AdGuard Home 平臺(tái)進(jìn)行范圍廣告攔截,想在手機(jī)上設(shè)置 DNS 卻不知如何入手,若是設(shè)置 WiFi 網(wǎng)絡(luò)的

    2024年02月05日
    瀏覽(29)
  • 如何通過Android平臺(tái)的API實(shí)現(xiàn)5G網(wǎng)絡(luò)的支持 安卓系統(tǒng)版本和5g網(wǎng)絡(luò)相關(guān)【一】

    如何通過Android平臺(tái)的API實(shí)現(xiàn)5G網(wǎng)絡(luò)的支持 安卓系統(tǒng)版本和5g網(wǎng)絡(luò)相關(guān)【一】

    前面分享了兩篇5G基帶相關(guān)的移植修改博文。 安卓高通機(jī)型的基帶移植 修改 編譯的相關(guān) 增加信號 支持5G等【一】 安卓高通機(jī)型的基帶移植 修改 編譯的相關(guān) 增加信號 支持5G等【二】 今天的帖子聊聊安卓版本與5G網(wǎng)絡(luò)與機(jī)型和修改之間相關(guān)的話題。眾所周知,目前的機(jī)型基本

    2024年02月09日
    瀏覽(29)
  • 工業(yè)邊緣網(wǎng)關(guān)HiWoo Box的4G/5G CPE功能:為現(xiàn)場無線設(shè)備提供網(wǎng)絡(luò)

    隨著工業(yè)物聯(lián)網(wǎng)的快速發(fā)展,現(xiàn)場設(shè)備的無線連接需求越來越迫切。然而,在一些室外或者不方便布網(wǎng)的場景下,為現(xiàn)場的無線設(shè)備提供網(wǎng)絡(luò)仍然是一個(gè)挑戰(zhàn)。為了滿足這一需求,工業(yè)邊緣網(wǎng)關(guān)HiWoo Box引入了4G/5G CPE(Customer Premises Equipment)功能,不僅可以使用4G或5G物聯(lián)卡實(shí)現(xiàn)

    2024年02月15日
    瀏覽(31)
  • 騰訊云3年輕量應(yīng)用服務(wù)器2核4G5M和2核2G4M詳細(xì)介紹

    騰訊云3年輕量應(yīng)用服務(wù)器2核4G5M和2核2G4M詳細(xì)介紹

    騰訊云輕量應(yīng)用服務(wù)器3年配置,目前可以選擇三年的輕量配置為2核2G4M和2核4G5M,2核2G4M和2核4G5M帶寬,當(dāng)然也可以選擇選一年,第二年xufei會(huì)比較gui,騰訊云百科分享騰訊云輕量應(yīng)用服務(wù)器3年配置表: 目錄 騰訊云輕量應(yīng)用服務(wù)器3年配置 1、關(guān)于輕量服務(wù)器CPU 2、關(guān)于輕量服務(wù)

    2024年02月12日
    瀏覽(23)
  • 2023 年騰訊云服務(wù)器配置價(jià)格表出爐(2核2G/2核4G/4核8G/8核16G、16核32G)

    2023 年騰訊云服務(wù)器配置價(jià)格表出爐(2核2G/2核4G/4核8G/8核16G、16核32G)

    騰訊云輕量應(yīng)用服務(wù)器為輕量級的云服務(wù)器,使用門檻低,按套餐形式購買,輕量應(yīng)用服務(wù)器套餐自帶的公網(wǎng)帶寬較大,4M、6M、7M、10M、14M及20M套餐可選,如果是云服務(wù)器CVM這個(gè)帶寬價(jià)格就要貴很多了。 騰訊云輕量應(yīng)用服務(wù)器配置高價(jià)格優(yōu)惠,性能也很不錯(cuò),公網(wǎng)帶寬4M起步

    2023年04月08日
    瀏覽(23)
  • 4G/5G卡使用 EC200-CN

    4G/5G卡使用 EC200-CN

    在串口中查看4G卡網(wǎng)口如下為enx020c29a39b6d ?輸入如下命令啟動(dòng)自動(dòng)獲取3s后按ctrl+c ? 輸入minicom -D /dev/ttyUSB2后先輸入: ATE1啟動(dòng)回顯。 AT+qnetdevctl=1,1,1播號回復(fù)ok表示成功。 ? 查看ip已成功獲取 ?

    2024年02月20日
    瀏覽(18)
  • [4G/5G/6G專題基礎(chǔ)-161]:常見的濾波技術(shù)

    濾波(Filtering)是信號處理中的一種基本操作,用于改變信號的特性或者 去除信號中的干擾成分 。濾波器可以看作是一種系統(tǒng),將輸入信號作為輸入,經(jīng)過處理后產(chǎn)生輸出信號。 濾波在信號處理中廣泛應(yīng)用,用于 去除噪聲 、 平滑信號 、 頻率選擇 等。 不同的濾波器類型和

    2024年02月13日
    瀏覽(20)
  • 智慧照明迎來新升級:5G/4G智慧燈桿網(wǎng)關(guān)助力節(jié)能控制

    智慧照明迎來新升級:5G/4G智慧燈桿網(wǎng)關(guān)助力節(jié)能控制

    近年來,隨著智能科技的飛速發(fā)展,智慧照明系統(tǒng)已成為城市建設(shè)的熱門話題。其中,5G/4G智慧燈桿網(wǎng)關(guān)作為智慧照明的重要組成部分,正逐漸引起人們的關(guān)注。其能夠?qū)崿F(xiàn)智能控制與遠(yuǎn)程管理,為城市節(jié)能減排做出了巨大貢獻(xiàn)。 5G/4G智慧燈桿網(wǎng)關(guān)智能照明應(yīng)用 首先,5G/4G智

    2024年01月18日
    瀏覽(27)
  • Wi-Fi、4G、5G的物理層技術(shù)

    Wi-Fi、4G、5G的物理層技術(shù)

    時(shí)間軸 通信標(biāo)準(zhǔn) 支持頻段 信道寬度 傳輸速率 是否兼容其他協(xié)議標(biāo)準(zhǔn) 1999 802.11a 5GHz 20MHz 54Mbit/s 不兼容 1999 802.11b 2.4GHz 20MHz 11Mbit/s 不兼容 2003 802.11g 2.4GHz 20MHz 54Mbit/s 兼容802.11b 2009 802.11n 2.4G5GHz 20/40MHz 300/450/600Mbit/s 兼容802.11a/b/g 2013 802.11ac 5GHz 80/160MHz 433/867/1730Mbit/s 兼容802.11a/n

    2024年01月21日
    瀏覽(29)
  • 香橙派OrangePi zero H2+ 驅(qū)動(dòng)移遠(yuǎn)4G/5G模塊

    香橙派OrangePi zero H2+ 驅(qū)動(dòng)移遠(yuǎn)4G/5G模塊

    目錄 1 安裝系統(tǒng)和內(nèi)核文件: 1.1 下載鏡像 1.2 內(nèi)核頭安裝? 1.2.1 下載內(nèi)核 1.2.2 將內(nèi)核頭文件導(dǎo)入開發(fā)板中 1.2.3?安裝內(nèi)核頭 2 安裝依賴工具: 2.1 Installing Required Host Utilities 3 驅(qū)動(dòng)步驟:? ? ? ? 3.1 下載模塊驅(qū)動(dòng)文件 3.2 找到接近內(nèi)核的文件 3.3 將v5.4.51驅(qū)動(dòng)文件導(dǎo)入開發(fā)板中

    2024年02月10日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包