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

这篇具有很好参考价值的文章主要介绍了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);
}

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

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

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

使用方法和说明

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

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

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

代码示例:
 文章来源地址https://www.toymoban.com/news/detail-606568.html

TelephonyManager  mTelephonyManager = (TelephonyManager) getSystemService(context.TELEPHONY_SERVICE);

int subId = 1; //要检查的SIM的subId

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

代码链接参考:

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

到了这里,关于Android TelephonyManager双卡获取数据开启状态异常的可能原因的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android动态获取手机是否是充电状态

    参考谷歌官方文档:https://developer.android.google.cn/topic/performance/power 在应用中执行某些操作 , 如软件云端备份 , 从服务器端获取最新版本号 , 从服务器端缓存最新软件安装包 , 固件版本 , 等操作 , 最好都在充电状态 , 我这边是做一个需求,电池容量校准,校准条件是需要在连接充

    2023年04月08日
    浏览(36)
  • Android完美获取状态栏高度、标题栏高度、编辑区域高度的获取

    获取状态栏高度——方法3 应用区的顶端位置即状态栏的高度 注意 该方法不能在初始化的时候用 */ Rect rectangle= new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(rectangle); //高度为rectangle.top-0仍为rectangle.top Log.e(“WangJ”, “状态栏-方法3:” + rectangle.top); 看结果: *注意* 如果

    2024年02月02日
    浏览(38)
  • Android应用开发(23)获取亮灭屏状态

    Android应用开发学习笔记——目录索引 在android 应用程序获取亮灭屏状态的常用方法有: 使用PowerManager提供的API函数 注册Broadcast监听 frameworks/base/core/java/android/os/PowerManager.java 使用PowerManager的API函数isInteractive()在应用程序中使用非常简单:在需要获取的地方调用一下即可。 百

    2024年02月15日
    浏览(39)
  • Layui中table数据表格使用方法渲染 返回的数据不符合规范,正确的成功状态码应为:“code“: 0异常处理

    返回的数据不符合规范,正确的成功状态码应为:“code”: 0异常处理 根据官方文档描述 异步数据参数中,数据格式解析的回调函数,用于将返回的任意数据格式解析成 table 组件规定的数据格式。table 组件默认规定的数据格式为 很多时候,接口返回的数据格式并不一定都符

    2024年02月16日
    浏览(39)
  • android - fragment 数据丢失?状态丢失?

    最佳答案 一些状态丢失的例子: 1.  假设您有一个按钮和一个 TextView 。在代码中,你已经定义了初始值为 0 的整数 i,它通过单击按钮递增 1,并且它的值显示在 TextView 中。假设你已经按下按钮 5 次,那么 textview 将被设置为 0。也就是说  Integer 在屏幕变化时丢失了它的值 。

    2024年02月10日
    浏览(57)
  • Bug解决:获取JDBC连接失败;嵌套异常是java.sql.SQLException:无法从底层数据库获取连接

    出现的问题 Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 说白了就是连接数据库出问题了,寻找了一个半小时才发现错误 从头到尾检查了一遍,这里使用的是C3P0连接池。 解决方法 1.如果使用的是c3p0连接池,prop

    2023年04月08日
    浏览(48)
  • 数据结构:图文详解 队列 | 循环队列 的各种操作(出队,入队,获取队列元素,判断队列状态)

    目录 队列的概念 队列的数据结构 队列的实现 入队 出队 获取队头元素 获取队列长度 循环队列的概念 循环队列的数据结构 循环队列的实现 判断队列是否为空 判断队列是否已满 入队 出队 得到队头元素 得到队尾元素 队列(Queue)是一种数据结构,是一种 先进先出 (First-

    2024年02月04日
    浏览(37)
  • 基于STM32CUBEMX驱动TMOS模块STHS34PF80(6)----获取状态数据

    STHS34PF80传感器项目种修改 Arduino 脚本,重新移植到STM32的MCU中。 该项目基于STHS34PF80 IR温度传感器,能够检测环境和物体温度,并且在最大4米范围内检测存在和运动。有一个Arduino脚本,显示如何为基本环境和物体温度测量配置传感器,并如何配置嵌入式功能算法,并使用它们

    2024年02月11日
    浏览(31)
  • vue做移动端上拉加载 删除当前列表某个数据 保持当前状态 继续获取下一页不影响正常的数据

    //主要思路是把点击删除的数据让后端置为false // 比如我请求了3页,一页10条数据 // 一共30条,我一条一条删除,点击删除之后调用后端删除接口, // 但是不能调用刷新接口,不然我请求的3页数据就会重置到第一页, // 我可以把每次分页请求的数据保存在前端data的数组里,

    2024年02月16日
    浏览(53)
  • ros中常见问题处理:延迟问题解决方法、订阅的数据感觉比发布的数据要多;如果没有正在接收消息,那么状态如何获取?

    在ROS中,消息的发布和订阅是异步的,也就是说,当你调用pub.publish(output_msg)发布消息时,该函数会立即返回,并不会等待所有订阅者接收消息。因此,如果你的程序出现延迟,可能是由于某些原因导致消息被堵塞或丢失。 以下是几种可能导致延迟的原因和解决方法: 1,消

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包