【开发方案】Android 双卡设备手动搜网功能适配

2024-03-14 18:20

本文主要是介绍【开发方案】Android 双卡设备手动搜网功能适配,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、背景

存在运营商需求:当SIM卡设置中选择了自动搜网,那么在重启开机后要执行一次手动搜网。

若基于本身单卡的实现,只搜索卡槽0的,而且写成了单线程,那么就在适配双卡的过程中还需要调整设计模式。

二、源码逻辑

  1. Settings应用发送消息,Telephony 模块Handler回调方法
  2. TeleService 处理消息 EVENT_GET_NETWORK_SELECTION_MODE_DONE,并notifyRequester()
  3. TelephonyManager => MD

(一)Settings APP

packages/apps/Settings/src/com/android/settings/network/  界面

(二)Telephony Service

packages/services/Telephony/src/com/android/phone/PhoneInterfaceManager.java 业务逻辑

  • handleMessage -> notifyRequester
    /*** A handler that processes messages on the main thread in the phone process. Since many* of the Phone calls are not thread safe this is needed to shuttle the requests from the* inbound binder threads to the main thread in the phone process.  The Binder thread* may provide a {@link MainThreadRequest} object in the msg.obj field that they are waiting* on, which will be notified when the operation completes and will contain the result of the* request.** <p>If a MainThreadRequest object is provided in the msg.obj field,* note that request.result must be set to something non-null for the calling thread to* unblock.*/private final class MainThreadHandler extends Handler {@Overridepublic void handleMessage(Message msg) {MainThreadRequest request;  Message onCompleted;AsyncResult ar;UiccPort uiccPort;IccAPDUArgument iccArgument;final Phone defaultPhone = getDefaultPhone();switch (msg.what) {case EVENT_GET_NETWORK_SELECTION_MODE_DONE://obj参数保存了一个AsyncResult对象ar = (AsyncResult) msg.obj;//userObj参数保存了一个MainThreadRequest对象request = (MainThreadRequest) ar.userObj;if (ar.exception != null) {  //异步请求异常,设置结果unknownrequest.result = TelephonyManager.NETWORK_SELECTION_MODE_UNKNOWN;} else {  //根据异步请求结果设置网络选择模式int mode = ((int[]) ar.result)[0];if (mode == 0) {  //mode0自动搜网request.result = TelephonyManager.NETWORK_SELECTION_MODE_AUTO;} else {  //mode1手动搜网request.result = TelephonyManager.NETWORK_SELECTION_MODE_MANUAL;}}notifyRequester(request);  //通知请求异步操作的结果break;default:Lo

这篇关于【开发方案】Android 双卡设备手动搜网功能适配的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809303

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

Springboot3+将ID转为JSON字符串的详细配置方案

《Springboot3+将ID转为JSON字符串的详细配置方案》:本文主要介绍纯后端实现Long/BigIntegerID转为JSON字符串的详细配置方案,s基于SpringBoot3+和Spr... 目录1. 添加依赖2. 全局 Jackson 配置3. 精准控制(可选)4. OpenAPI (Spri

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP

关于跨域无效的问题及解决(java后端方案)

《关于跨域无效的问题及解决(java后端方案)》:本文主要介绍关于跨域无效的问题及解决(java后端方案),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录通用后端跨域方法1、@CrossOrigin 注解2、springboot2.0 实现WebMvcConfig