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

背景

应用内不指定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的subId

if(mTelephonyManager.isDataEnabled(subId)) {
    //移动数据已启用
} else {
    //移动数据未启用
}

代码链接参考:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/45008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Hadoop——Hive运行环境搭建

Windows&#xff1a;10 JDK&#xff1a;1.8 Apache Hadoop&#xff1a;2.7.0 Apache Hive&#xff1a;2.1.1 Apache Hive src&#xff1a;1.2.2 MySQL&#xff1a;5.7 1、下载 Hadoop搭建 Apache Hive 2.1.1&#xff1a;https://archive.a…

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

【JVM】浅看JVM的运行流程和垃圾回收

1.JVM是什么 JVM&#xff08; Java Virtual Machine&#xff09;就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程&#xff1a; 程序在执行之前先要把java代码转换成字节码&#xff08;class文件&#xff09;&#xff0c;JVM 首先需要把字节码通过…

macbook 软件iMovie for Mac(专业视频剪辑工具)中文版

iMovie mac中文版是一款针对Mac平台量身定做的视频编辑工具&#xff0c;软件凭借流线型设计和直观的编辑功能&#xff0c;可以让您感受前所未有的方式制作好莱坞风格的预告片和精美电影&#xff0c;并且还可以浏览视频资料库&#xff0c;快速共享挚爱瞬间&#xff0c;创建精美的…

结构型设计模式之装饰器模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

如何在Windows上恢复已删除的文件?

大多数人在无意中删除了一些重要文件后无法恢复。这些文件被暂时删除&#xff0c;直到我们清空回收站才会消失。你可以通过右键单击回收站中的文件并选择还原选项来轻松恢复这些文件。但是&#xff0c;如果你清理回收站删除了文件怎么办&#xff1f;或者不小心使用Shift Delet…

SpringCloud学习路线(10)——分布式搜索ElasticSeach基础

一、初识ES &#xff08;一&#xff09;概念&#xff1a; ES是一款开源搜索引擎&#xff0c;结合数据可视化【Kibana】、数据抓取【Logstash、Beats】共同集成为ELK&#xff08;Elastic Stack&#xff09;&#xff0c;ELK被广泛应用于日志数据分析和实时监控等领域&#xff0…

【数据挖掘】将NLP技术引入到股市分析

一、说明 在交易中实施的机器学习模型通常根据历史股票价格和其他定量数据进行训练&#xff0c;以预测未来的股票价格。但是&#xff0c;自然语言处理&#xff08;NLP&#xff09;使我们能够分析财务文档&#xff0c;例如10-k表格&#xff0c;以预测股票走势。 二、对自然语言处…

2023年Q2京东环境电器市场数据分析(京东数据产品)

今年Q2&#xff0c;环境电器市场中不少类目表现亮眼&#xff0c;尤其是以净水器、空气净化器、除湿机等为代表的环境健康电器。此外&#xff0c;像冷风扇这类具有强季节性特征的电器也呈现出比较好的增长态势。 接下来&#xff0c;结合具体数据我们一起来分析Q2环境电器市场中…

【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败

在jupyter notebook中运行Python代码&#xff0c;明明已经安装了第三方库&#xff0c;还是提示导入失败。 以导入pandas库为例&#xff0c;其他库同理&#xff1a; 报错代码&#xff1a; import pandas报错原因&#xff1a; 电脑上存在多个python运行环境&#xff08;比如&a…

JavaEE——Spring中存取Bean的注解

目录 一、存储Bean对象 1、定义 2、存储方式 &#xff08;1&#xff09;、类注解 【1】、Controller&#xff08;控制器存储&#xff09; 【2】、Service&#xff08;服务存储&#xff09; 【3】、Repository&#xff08;仓库存储&#xff09; 【4】、Component&#xf…

[JAVAee]线程安全

目录 线程安全的理解 线程不安全的原因 ①非原子性 ②可见性 ③代码重排序 体会何为不安全的线程 保证线程安全 一个代码在多线程的环境下就很容易出现错误. 线程安全的理解 线程安全是什么呢?通俗的来讲,线程安全就是在多线程的环境下,代码的结果是符合我们预期的,就…

Kafka基础架构与核心概念

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者&#xff0c;性能特点主要是…

VisualStudio如何进行插件开发?

文章目录 0.引言1.工具准备2.创建插件项目&#xff08;VSIX&#xff09;3.自定义VSIX属性4.创建一个command命令5.设置command名称6.编写command功能7.调试插件8.安装插件 0.引言 使用Visual Studio插件可以极大地提升开发效率、提供更好的集成环境、丰富扩展生态系统、方便调试…

python报错:‘unicodeescape‘ codec can‘t decode bytes解决办法

参考:https://blog.csdn.net/shuyudexiaowu/article/details/108771481 我的代码是这样&#xff1a; 错误原因是&#xff1a;python把字符串中的反斜杠“ \ ”当成了字符串的一部分&#xff0c;而不是反斜杠。 解决办法两个&#xff1a; 1、在文件目录前加个 r&#xff0c;&…

线性神经网路——线性回归随笔【深度学习】【PyTorch】【d2l】

文章目录 3.1、线性回归3.1.1、PyTorch 从零实现线性回归3.1.2、简单实现线性回归 3.1、线性回归 线性回归是显式解&#xff0c;深度学习中绝大多数遇到的都是隐式解。 3.1.1、PyTorch 从零实现线性回归 %matplotlib inline import random import torch #d2l库中的torch模块&a…

PCL 计算点云AABB包围盒

目录 一、算法原理二、代码实现1、直接计算2、惯性矩法三、结果展示本文由CSDN点云侠原创。爬虫自重,把自己当个人。 一、算法原理 AABB包围盒又称了 轴对齐包围盒,是点云包围盒里最简单的一种,其计算方法也极其简单,看代码即可理解!!!目前PCL中有直接计算和基于惯性偏…

Xshell使用sftp传输文件

单击工具栏新建回话图标&#xff0c;在弹出的新建回话窗口中协议选择SFTP&#xff0c;输入主机名或ip地址&#xff0c;端口号22&#xff0c;单击连接&#xff0c;输入用户名和密码完成创建连接。 本地/远程目录设置&#xff1a;新建会话时在下图中SFTP中设置文件上传下载的本地…

TOOD Task-aligned One-stage Object Detection 论文学习

1. 解决了什么问题&#xff1f; 目标检测通过多任务学习的方式&#xff0c;协同优化目标的分类和定位。分类任务会学习目标的判别特征&#xff0c;关注于目标的显著性或关键区域&#xff0c;而定位任务则学习准确地定位目标的边界。因为定位和分类的学习机制不同&#xff0c;这…

DP学习第三篇之不同路径

DP学习第三篇之不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 一.题目解析 二. 算法原理 状态表示 tips: 经验题目要求。以[i,j]位置为结尾&#xff0c;。。。 dp[i][j]: 走到[i, j]位置时&#xff0c;一共多少种路径 状态转移方程 tips: 用之前或之后的状…