权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permissionandroid:name="android.permission.MODIFY_PHONE_STATE"tools:ignore="ProtectedPermissions" />

反射调用:

//传入参数:1-SIM1, 2-SIM2findViewById(R.id.btn_sim1).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (getDefaultDataSubId() != 1) {setDefaultDataSubId(1);Log.d(TAG, "wjz debug onClick: 切换到SIM1!!!");} else {Log.d(TAG, "wjz debug onClick: 当前使用SIM1,无需切换!!!");}}
});findViewById(R.id.btn_sim2).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (getDefaultDataSubId() != 2) {setDefaultDataSubId(2);Log.d(TAG, "wjz debug onClick: 切换到SIM2!!!");} else {Log.d(TAG, "wjz debug onClick: 当前使用SIM2,无需切换!!!");}}
});private void setDefaultDataSubId(int subId) {SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);try {Method method = subscriptionManager.getClass().getDeclaredMethod("setDefaultDataSubId", int.class);method.invoke(subscriptionManager, subId);} catch (Exception e) {Log.e(TAG, "wjz debug setDefaultDataSubId: error is " + e.getMessage());}
}private int getDefaultDataSubId() {SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);try {Method method = subscriptionManager.getClass().getDeclaredMethod("getDefaultDataSubscriptionId");return (int) method.invoke(subscriptionManager);} catch (Exception e) {Log.e(TAG, "wjz debug getDefaultDataSubId: error is " + e.getMessage());}return 0;
}

测试结果:

2021-10-08 16:40:59.323 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM1!!!
2021-10-08 16:41:02.378 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 当前使用SIM1,无需切换!!!
2021-10-08 16:41:04.738 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM2!!!
2021-10-08 16:41:06.633 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 当前使用SIM2,无需切换!!!
2021-10-08 16:41:14.577 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM1!!!

原始代码:

//SubscriptionManager.java/*** 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);}/*** Set the subscription which will be used by default for data, with the subscription which* the supplied subscription ID corresponds to; or throw a RuntimeException if the supplied* subscription ID is not usable (check with {@link #isUsableSubscriptionId(int)}).** @param subscriptionId the supplied subscription ID** @hide*/@SystemApi@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)public void setDefaultDataSubId(int subscriptionId) {if (VDBG) logd("setDataSubscription sub id = " + subscriptionId);try {ISub iSub = TelephonyManager.getSubscriptionService();if (iSub != null) {iSub.setDefaultDataSubId(subscriptionId);}} catch (RemoteException ex) {// ignore it}}

Android app开发:代码切换移动数据走SIM1/SIM2相关推荐

  1. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  2. 写给Android App开发人员看的Android底层知识合集(1-8)

    写给Android App开发人员看的Android底层知识合集(1-8) 转自包老师:http://www.cnblogs.com/Jax/p/6864103.html 写给Android App开 ...

  3. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第二章:Android App 开发基础

    第 2 章 Android App开发基础 本章介绍基于Android系统的App开发常识,包括以下几个方面:App开发与其他软件开发有什么不一 样,App工程是怎样的组织结构又是怎样配置的,App开 ...

  4. Android app开发捷径,让你少去踩坑

    Android APP开发完成后,通常需要在哪些机型上进行测试? 开发Android APP时,需要考虑的分辨率有哪些? 目前华为.三星和小米市场占有率是遥遥领先的,华为各机型.三星Note2.Not ...

  5. Android APP开发需求文档范本

    Android  APP开发需求文档范本 软件需求文档格式的标准写法 1.引言 1.1 编写目的 • 阐明开发本软件的目的: 1.2 项目背景 • 标识待开发软件产品的名称.代码: • 列出本项目的任 ...

  6. android开发入门与实践_我的新书《Android App开发入门与实战》已经出版

    前言 工作之余喜欢在CSDN平台上写一些技术文章,算下时间也有两三年了.写文章的目的一方面是自己对技术的总结,另一方面也是将平时遇到的问题和解决方案与大家分享,还有就是在这个平台上能和大家共同交流. ...

  7. Android APP开发入门

    Android APP开发入门 目录 android_studio很好用的一个就是debug 1 1导入demo编译出错 1 4使用as运行安装不了apk安装adb 2 5SeekBar组件使用 2 ...

  8. Android App开发基础

    Android App开发基础 App的开发特点 (1)App的运行环境 1.使用数据线把手机连到电脑上 2.在电脑上安装手机的驱动程序 3.打开手机的开发者选项并启用USB调试 4.将连接的手机设为 ...

  9. iOS动手做一个直播app开发(代码篇)

    iOS动手做一个直播app开发(代码篇) ###开篇 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量都不错的文 ...

  10. Eclipse IDE 使用技巧和Android App 开发环境搭建和配置

    写在前面: 本片文章只是记录了自己学习时的一些笔记,纯粹是为了自己后面方便查找,片言碎语,不适合大家浏览,请大家不要参考这篇文章. 正文: Eclipse IDE 使用技巧               ...

最新文章

  1. 索尼AI CEO:我们要让AI在30年内拿到诺贝尔奖
  2. c++能干什么_「CG原画插画教程」学画画到底能干什么?
  3. python打印换行符_在Python编程中不使用换行符进行打印
  4. Linux查询命令帮助语句,linux有关命令的帮助和用法查看
  5. 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism
  6. DHCP八种报文详解
  7. 计算机测绘程序设计实验报告,计算机测绘程序及设计实验报告.doc
  8. webview出现图片加载异常 Mixed Content: The page at 'https
  9. 33、什么是 AIO?
  10. Typora安装 Pandoc实现导出功能
  11. 我的河海大学计算机考研经验之谈
  12. seo优化时网站_选择关键词的方法
  13. 澳门SEO优化:名词诠释大全以及新站上线后,seo优化应该如何做?
  14. 64位 iee754_IEEE 754标准
  15. CSI-RS-TRS介绍
  16. Mac快捷键:文本,浏览器页面,终端terminal
  17. 创客教育在空间设计中的服务研究
  18. 苹果11如何设置9宫格_iPhone 11怎么设置九宫格输入法?iPhone11九宫格输入法设置教程...
  19. Game Develope(二)
  20. 简历里项目经历怎么写,没有项目经历怎么办?

热门文章

  1. PHP性能分析工具:xhprof
  2. 2022-2028年中国沉香产业竞争现状及投资前景分析报告
  3. 罗格斯的计算机科学,罗格斯大学计算机科学研究生申请截止日期
  4. 使用JS监听键盘按下事件
  5. 关于多线程爬取小说排序混乱的问题
  6. 遗传算法python与matlab_遗传算法之Python实现代码
  7. 第16课:迁移学习的模型训练
  8. 机器学习资源备份,转载自大神https://zhuanlan.zhihu.com/p/26876504
  9. Spring学习笔记-C7-SpringMVC高级技术
  10. 基于U3D的VR开发教程:(1)基础环境配置