当前位置: 首页 > news >正文

Android 去掉SIM卡插拔出现的重启弹窗提示

调试过程中发现,
插入SIM卡会出现弹窗:SIM ADD: Restart your device to access the mobilenetwork.
拔掉SIM卡也会出现弹窗:SIM REMOVE: Restart your device to access the mobilenetwork.

分析下这块的实现,然后准备去掉:

通过排查代码,发现主要实现是在 frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccSlot.java 这个文件中:

    private void onIccSwap(boolean isAdded) {boolean isHotSwapSupported = mContext.getResources().getBoolean(R.bool.config_hotswapCapable);if (isHotSwapSupported) {log("onIccSwap: isHotSwapSupported is true, don't prompt for rebooting");return;}//....log("onIccSwap: isHotSwapSupported is false, prompt for rebooting");promptForRestart(isAdded);}private void promptForRestart(boolean isAdded) {synchronized (mLock) {// 监听弹窗的确认事件,重启设备// TODO: SimRecords is not reset while SIM ABSENT (only reset while//       Radio_off_or_not_available). Have to reset in both both//       added or removed situation.listener = new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {synchronized (mLock) {if (which == DialogInterface.BUTTON_POSITIVE) {if (DBG) log("Reboot due to SIM swap");PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);pm.reboot("SIM is added.");}}}};// 下面的代码主要是弹窗显示的处理Resources r = Resources.getSystem();// 弹窗显示的信息组装String title = (isAdded) ? r.getString(R.string.sim_added_title) :r.getString(R.string.sim_removed_title);String message = (isAdded) ? r.getString(R.string.sim_added_message) :r.getString(R.string.sim_removed_message);String buttonTxt = r.getString(R.string.sim_restart_button);// new 一个 dialog出来AlertDialog dialog = new AlertDialog.Builder(mContext).setTitle(title).setMessage(message).setPositiveButton(buttonTxt, listener).create();//设置类型dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//显示 dialogdialog.show();}}@Overridepublic void handleMessage(Message msg) {switch (msg.what) {case EVENT_CARD_REMOVED:onIccSwap(false);break;case EVENT_CARD_ADDED:onIccSwap(true);break;default:loge("Unknown Event " + msg.what);}}

触发 handleMessage 的是在 UiccSlot.java 文件中的 update 函数。

看代码中有一个 isHotSwapSupported 的变量判断。可以开启或者屏蔽这个弹窗的处理,找下代码:

        boolean isHotSwapSupported = mContext.getResources().getBoolean(R.bool.config_hotswapCapable);

接下来就简单了,只需要从配置文件中关闭这个选项即可:

    <!-- Is the device capable of hot swapping an UICC Card --><bool name="config_hotswapCapable">true</bool>

相关文章:

  • STM32 的 SDIO 接口(基于STM32F429HAL库)
  • 【xhs截流软件】爬取小红书关键词笔记下的筛选评论
  • ComfyUI 节点、插件的基本指南
  • PHP程序如何实现限制一台电脑登录?
  • 024.PL-SQL进阶—游标
  • 吐血整理 ChatGPT 3.5/4.0 新手使用手册~ 【亲测好用】
  • ES6的简单介绍(第三部分)
  • 基于Java语言的充电桩平台+充电桩系统+充电桩管理系统+充电桩系统源码+充电桩管理后台+充电桩小程序
  • Service和Endpoints
  • python学习记录3
  • ansible部署二进制mysql 8
  • 文献阅读——基于拉格朗日乘子的电力系统安全域边界通用搜索方法
  • 【RDMA】mlxconfig修改和查询网卡(固件)配置--驱动工具
  • 到时间没回家又不接电话?如何迅速确定孩子的位置?
  • spark读取数据性能提升
  • 深入了解以太坊
  • Angular6错误 Service: No provider for Renderer2
  • ESLint简单操作
  • Flex布局到底解决了什么问题
  • iOS | NSProxy
  • js操作时间(持续更新)
  • Linux Process Manage
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Python语法速览与机器学习开发环境搭建
  • Sass 快速入门教程
  • VuePress 静态网站生成
  • Web标准制定过程
  • 从PHP迁移至Golang - 基础篇
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 聊聊redis的数据结构的应用
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 漂亮刷新控件-iOS
  • 微信小程序:实现悬浮返回和分享按钮
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​学习一下,什么是预包装食品?​
  • "无招胜有招"nbsp;史上最全的互…
  • # dbt source dbt source freshness命令详解
  • (Forward) Music Player: From UI Proposal to Code
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (五)网络优化与超参数选择--九五小庞
  • (已解决)什么是vue导航守卫
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • ***利用Ms05002溢出找“肉鸡
  • .gitignore文件忽略的内容不生效问题解决
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .net core 6 redis操作类
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET和.COM和.CN域名区别