热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用Kotlin获得双SIM卡信号强度

使用电话状态监听器,我正在获取默认的SIM信号强度,如何确定第二个SIM信号强度

使用电话状态监听器,我正在获取默认的SIM信号强度,如何确定第二个SIM信号强度。
请帮助我找出这个问题

我也使用了Telemetry manager,但我没有获得第二模拟信号强度

val phonestateListener: PhOnestateListener= object : PhonestateListener() {
override fun onServiceStateChanged(serviceState: ServiceState) {
Timber.d("Current cell state : ${serviceState.state}")
}
override fun onSignalStrengthsChanged(signalStrength: SignalStrength)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Timber.d("Current cell signal: ${signalStrength.level}")
} else {
Timber.d("Current cell signal:${signalStrength.gsmSignalStrength}")
}
}
}
telephOnyManager= getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
telephonyManager.listen(phonestateListener,PhonestateListener.LISTEN_SERVICE_STATE or PhonestateListener.LISTEN_SIGNAL_STRENGTHS)


以上问题我都得到了解决方案

fun getRegisteredCellInfo(cellInfos: MutableList): ArrayList {
val registeredCellInfos = ArrayList()
if (cellInfos.isNotEmpty()) {
for (i in cellInfos.indices) {
if (cellInfos[i].isRegistered) {
registeredCellInfos.add(cellInfos[i])
}
}
}
return registeredCellInfos
}
fun getNetworkStrength(): Pair {
var strength1 = -1
var strength2 = -1
val manager = getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val telephOnyManager= applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if (telephonyManager.allCellInfo != null) {
val allCellinfo = telephonyManager.allCellInfo
val activeSubscriptiOnInfoList= manager.activeSubscriptionInfoList
val regCellInfo= getRegisteredCellInfo(allCellinfo)
activeSubscriptionInfoList.forEachIndexed { Subindex,subs ->
if (activeSubscriptionInfoList.size >= 2) {
if (regCellInfo.size >= 2) {
if (subs.simSlotIndex == 0) {
if (subs.carrierName != "No service") {
strength1 = when (val info1 = regCellInfo[0]) {
is CellInfoLte -> info1.cellSignalStrength.dbm
is CellInfoGsm -> info1.cellSignalStrength.dbm
is CellInfoCdma -> info1.cellSignalStrength.dbm
is CellInfoWcdma -> info1.cellSignalStrength.dbm
else -> 0
}
Timber.i("subs $subs")
Timber.i("sim1 ${subs.carrierName} ${subs.mnc} $strength1")
} else {
strength1 = -1
}
} else if (subs.simSlotIndex == 1) {
if (subs.carrierName != "No service") {
strength2 = when (val info2 = regCellInfo[1]) {
is CellInfoLte -> info2.cellSignalStrength.dbm
is CellInfoGsm -> info2.cellSignalStrength.dbm
is CellInfoCdma -> info2.cellSignalStrength.dbm
is CellInfoWcdma -> info2.cellSignalStrength.dbm
else -> 0
}
Timber.i("sim2 ${subs.carrierName} $strength2")
} else {
strength2 = -1
}
}
}
}else if(activeSubscriptionInfoList.size == 1)
{
if(regCellInfo.size >= 1) {
if (subs.simSlotIndex == 0) {
if (subs.carrierName != "No service") {
strength1 = when (val info1 = regCellInfo[0]) {
is CellInfoLte -> info1.cellSignalStrength.level
is CellInfoGsm -> info1.cellSignalStrength.level
is CellInfoCdma -> info1.cellSignalStrength.level
is CellInfoWcdma -> info1.cellSignalStrength.level
else -> 0
}
Timber.i("subs $subs")
Timber.i("sim1 ${subs.carrierName} ${subs.mnc} $strength1")
} else {
strength1 = -1
}
}
}
strength2 = -2
}
}
}
}
Timber.i("final strenght sim1 $strength1 sim2 $strength2")
return Pair(strength1,strength2)
}

推荐阅读
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
author-avatar
走ln方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有