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

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() {
                @Override
                public 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);
            //显示 dialog
            dialog.show();
        }
    }
    
    @Override
    public 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>

http://www.kler.cn/news/322045.html

相关文章:

  • 004_动手实现MLP(pytorch)
  • 啥?Bing搜索古早BUG至今未改?
  • 爱的旅程 再次起航 朵拉朵尚公益行为更多的孩子点亮梦想
  • Windows开发工具使用技巧
  • Python 二次开发金橙子打印软件:开启高效打印新旅程
  • [vulnhub] Jarbas-Jenkins
  • 【含文档】基于Springboot+Vue的高校失物招领平台(含源码+数据库+lw)
  • 机器学习笔记(一)初识机器学习
  • 使用docker形式部署prometheus+alertmanager+钉钉告警
  • vue3使用provide/inject异步传递爷孙组件数据
  • 望繁信科技CTO李进峰受邀在上海外国语大学开展流程挖掘专题讲座
  • C/C++语言基础--C++构造函数、析构函数、深拷贝与浅拷贝等等相关知识讲解
  • 论文 | Reframing Instructional Prompts to GPTk’s Language
  • 计算机毕业设计hadoop+hive航班预测系统 飞机票航班数据分析可视化大屏 机票预测 机票爬虫 飞机票推荐系统 大数据毕业设计
  • 目前市面上有销售的飞行汽车吗
  • 基于JAVA+SpringBoot+Vue的疫苗发布和接种预约系统
  • 【智慧城市】新中地GIS开发实训项目:华农优秀学生学习成果展示(3)智游江城
  • 基于单片机的智能校园照明系统
  • [leetcode]63_不同路径II_有障碍版本
  • C++:模板(1)
  • 11年计算机考研408-数据结构
  • springcloud为什么采用Http而非RPC
  • 深入理解 React 的 useState Hook
  • Java 事务隔离级别及相关概念
  • linux信号| 学习信号三步走 | 学习信号需要打通哪些知识脉络?
  • C++学习笔记(45)
  • Spring IDEA 2024 自动生成get和set以及toString方法
  • JS设计模式之桥接模式:搭建跨越维度的通路
  • 低代码革命:加速云原生时代的端到端产品创新
  • ✨机器学习笔记(五)—— 神经网络,前向传播,TensorFlow