Android TelephonyManager双卡获取数据开启状态异常的可能原因

news/2024/11/28 15:50:50/

背景

应用内不指定subId获取数据状态可能会错误,因为可能拿到voice的能力,而非data。

代码逻辑

1、通过TelephonyManager的isDataEnabled()没有指定subId时,调用内部方法isDataEnabledForReason,传入getId()参数以指定subid,然后会执行到SubscriptionManager的getDefaultDataSubscriptionId()以获取默认值,

/*** Returns whether mobile data is enabled or not per user setting. There are other factors* that could disable mobile data, but they are not considered here.** If this object has been created with {@link #createForSubscriptionId}, applies to the given* subId. Otherwise, applies to {@link SubscriptionManager#getDefaultDataSubscriptionId()}** <p>Requires one of the following permissions:* {@link android.Manifest.permission#ACCESS_NETWORK_STATE},* {@link android.Manifest.permission#MODIFY_PHONE_STATE}, or* {@link android.Manifest.permission#READ_BASIC_PHONE_STATE* READ_BASIC_PHONE_STATE} or that the calling app has carrier* privileges (see {@link #hasCarrierPrivileges}).** <p>Note that this does not take into account any data restrictions that may be present on the* calling app. Such restrictions may be inspected with* {@link ConnectivityManager#getRestrictBackgroundStatus}.** @return true if mobile data is enabled.*/
@RequiresPermission(anyOf = {android.Manifest.permission.ACCESS_NETWORK_STATE,android.Manifest.permission.MODIFY_PHONE_STATE,android.Manifest.permission.READ_PHONE_STATE,android.Manifest.permission.READ_BASIC_PHONE_STATE})
@RequiresFeature(PackageManager.FEATURE_TELEPHONY_DATA)
public boolean isDataEnabled() {try {return isDataEnabledForReason(DATA_ENABLED_REASON_USER);} catch (IllegalStateException ise) {// TODO(b/176163590): Remove this catch once TelephonyManager is booting safely.Log.e(TAG, "Error calling #isDataEnabled, returning default (false).", ise);return false;}
}

2、根据SubscriptionManager逻辑,会查询获取DefaultSubId的值,最终用的是SubscriptionController数据

/*** Returns the system's default data subscription id.** On a voice only device or on error, will return INVALID_SUBSCRIPTION_ID.** @return the default data subscription Id.*/
public static int getDefaultDataSubscriptionId() {return sDefaultDataSubIdCache.query(null);
}

3、SubscriptionController的逻辑,未指定subid时拿到的会是voice的 能力

使用方法和说明

在Android中,TelephonyManager类的isDataEnabled()方法用于检查移动数据连接是否启用。而subId(Subscription ID)是用于标识不同SIM卡的唯一ID。

Note:isDataEnable()可不传入参数,即默认的subId(使用getDefaultDataSubscriptionId()方法获取),也可以指定subId(如下代码示例)。

  1. 在多卡手机中,可以通过TelephonyManager的getSubId()方法获取当前活动的SIM卡的SubId,
  2. 然后可使用TelephonyManager.isDataEnabled()方法检查指定的subId对应的SIM卡的移动数据链接是否启用

代码示例:
 

TelephonyManager  mTelephonyManager = (TelephonyManager) getSystemService(context.TELEPHONY_SERVICE);int subId = 1; //要检查的SIM的subIdif(mTelephonyManager.isDataEnabled(subId)) {//移动数据已启用
} else {//移动数据未启用
}

代码链接参考:

  • TelephonyManager.isDataEnable()
  • SubscriptionManager.getDefaultDataSubscriptionId()
  • SubscriptionController.getDefaultSubId()

http://www.ppmy.cn/news/979202.html

相关文章

新突破!谷歌量子计算机6秒内完成47年计算

谷歌科学家在量子计算机方面取得重大突破&#xff0c;谷歌在 arxiv 上发表了一篇关于量子计算机的论文&#xff0c;并宣称他们的量子计算机在短短 6 秒内就完成了世界上最先进计算机 47 年的计算量。 论文称&#xff0c;谷歌最新Sycamore量子处理器目前拥有70个量子比特&#x…

java篇 类的基本概念0x01:包与类

文章目录 package&#xff08;包&#xff09;IDEA 中目录结构在包中使用类访问修饰符不同包中的同名类类的全限定名java 中不需要导入&#xff08;import&#xff09; 就能直接使用的类&#xff1a;java.lang包中的所有类 package&#xff08;包&#xff09; 为了避免类在一起…

MySQL中mysql_affected_rows()的介绍和用法

摘要&#xff1a;本文将详细介绍MySQL数据库中mysql_affected_rows()函数的概念和使用方法。通过示例和输出结果展示如何利用该函数获取SQL语句执行后所影响的行数&#xff0c;帮助读者更好地理解和应用这一功能。 1. 什么是mysql_affected_rows() mysql_affected_rows()是My…

华为eNSP:isis的配置

一、拓扑图 二、路由器的配置 配置接口IP AR1&#xff1a; <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 1.1.1.1 24 [Huawei-GigabitEthernet0/0/0]qu AR2: <Huawei>system-view [Huawei]int g0/0/0 [Huawei-GigabitEthe…

Linux-head

Linux命令&#xff1a;head命令详解 概述&#xff1a;head命令用于显示文件文字区块 1、格式 head 【参数】【文件】 2、参数 -q 隐藏文件名   -v 显示文件名   -c<字节> 显示字节数   -n<行数> 显示的行数 [rootwww ~]# head [-n number] 文件 选项与参…

63. 不同路径 II

题目链接&#xff1a;力扣 解题思路&#xff1a;类似于 62. 不同路径 动态规划&#xff1a; 定义状态&#xff1a;对于m*n的网络&#xff0c;从最后一行到右下角&#xff0c;以及从最后一列到右下角&#xff0c;都只有一条不同路径&#xff1a;一直向右或一直向下&#xff0c…

华为数通HCIP-ISIS高级

isis区域间的互访 1、L2区域 to L1区域 在L1区域发布的路由会以L1-LSP在L1区域内传递&#xff0c;到达L1-2路由器时&#xff0c;L1-2路由器会将该L1-LSP转换为L2-LSP在L2区域内传递&#xff1b; 因此L2区域的设备可以学习到L1区域的明细路由&#xff0c;进行访问&#xff1b;…

2023年深圳杯数学建模B题电子资源版权保护问题

2023年深圳杯数学建模 B题 电子资源版权保护问题 原题再现&#xff1a; 版权又称著作权&#xff0c;包括发表权、署名权、修改权、保护作品完整权、复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权及应当由著作权人…