Android 11.0 长按按键切换SIM卡默认移动数据

Android 11.0 长按按键切换SIM卡默认移动数据

近来收到客户需求想要通过长按按键实现切换SIM卡默认移动数据的功能,该功能主要通过长按按键发送广播来实现,具体修改参照如下:

首先创建广播,具体修改参照如下:

/vendor/mediatek/proprietary/packages/apps/MtkSettings/AndroidManifest.xml
 

+       <receiver
+            android:name=".sim.SimReceiver">
+            <intent-filter>
+                <action android:name="android.intent.action.sim.longpress" />
+            </intent-filter>
+        </receiver>

其次合入具体功能实现的SimReceiver.java文件:

/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/sim/SimReceiver.java

package com.android.settings.sim;import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.RingtoneManager;
import android.net.Uri;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.util.Log;
import java.util.List;public class SimReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals("android.intent.action.sim.longpress")) {SubscriptionManager subscriptionManager = SubscriptionManager.from(context);List<SubscriptionInfo> subscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();if (subscriptionInfoList != null && subscriptionInfoList.size() > 1) {int subId1 = subscriptionInfoList.get(0).getSubscriptionId();int subId2 = subscriptionInfoList.get(1).getSubscriptionId();if (SubscriptionManager.getDefaultDataSubscriptionId() == subId1){subscriptionManager.setDefaultDataSubId(subId2);} else if (SubscriptionManager.getDefaultDataSubscriptionId() == subId2){subscriptionManager.setDefaultDataSubId(subId1);}}}}
}

然后配置对应按键长按发送广播,具体修改参照如下:

/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

+            case KeyEvent.KEYCODE: {
+                if (down) {
+		    Handler mHandler = new Handler();
+                    mHandler.postDelayed(new Runnable() {
+                        public void run() {
+                            sendBC("android.intent.action.sim.longpress");
+                        }
+                    }, 2 * 1000);
+                }+    private void sendBC(String action) {
+        Intent intent = new Intent();
+        intent.setAction(action);
+        intent.addFlags(0x01000000);
+        mContext.sendBroadcast(intent);
+    }

最后注册接收广播:

/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/sim/SimDialogActivity.java

+import android.content.IntentFilter;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);showOrUpdateDialog();
+	SimReceiver aSimReceiver = new SimReceiver();
+       IntentFilter intentFilter = new IntentFilter();
+       intentFilter.addAction("android.intent.action.sim.longpress");
+       registerReceiver(aSimReceiver ,intentFilter);}

重新编译验证,修改生效,已实现通过长按按键切换SIM卡默认移动数据功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麒麟KYLINOS上删除多余有线连接

原文链接&#xff1a;麒麟KYLINOS上删除多余网络有线连接 hello&#xff0c;大家好啊&#xff0c;今天我要给大家介绍的是在麒麟KYLINOS操作系统中&#xff0c;如何删除通过Parallels Desktop虚拟机安装时产生的多余有线连接。在使用Parallels Desktop虚拟机安装麒麟桌面操作系…

C/C++ 题目:给定字符串s1和s2,判断s1是否是s2的子序列

判断子序列一个字符串是否是另一个字符串的子序列 解释&#xff1a;字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符&#xff0c;不改变剩余字符相对位置形成的新字符串。 如&#xff0c;"ace"是"abcde"的一个子序…

服务器数据恢复—raid5少盘状态下新建raid5如何恢复原raid5数据?

服务器数据恢复环境&#xff1a; 一台服务器上搭建了一组由5块硬盘组建的raid5阵列&#xff0c;服务器上层存放单位重要数据&#xff0c;无备份文件。 服务器故障&分析&#xff1a; 服务器上raid5有一块硬盘掉线&#xff0c;外聘运维人员在没有了解服务器具体情况下&#x…

如何在linux中使用rpm管理软件

本章主要介绍使用rpm对软件包进行管理。 使用rpm查询软件的信息 使用rpm安装及卸载软件 使用rpm对软件进行更新 使用rpm对软件进行验证 rpm 全称是redhat package manager&#xff0c;后来改成rpm package manager&#xff0c;这是根据源 码包编译出来的包。先从光盘中拷贝一…

[算法每日一练]-双指针 (保姆级教程篇 1) #A-B数对 #求和 #元音字母 #最短连续子数组 #无重复字符的最长子串 #最小子串覆盖 #方块桶

目录 A-B数对 解法一&#xff1a;双指针 解法二&#xff1a;STL二分查找 解法三&#xff1a;map 求和 元音字母 最短连续子数组 无重复字符的最长子串 最小子串覆盖 方块桶 双指针特点&#xff1a;双指针绝不回头 A-B数对 解法一&#xff1a;双指针 先把数列排列成…

《C++新经典设计模式》之第8章 外观模式

《C新经典设计模式》之第8章 外观模式 外观模式.cpp 外观模式.cpp #include <iostream> #include <memory> using namespace std;// 中间层角色&#xff0c;隔离接口&#xff0c;两部分模块通过中间层打交道 // 提供简单接口&#xff0c;不与底层直接打交道 // 提…

Grounding DINO、TAG2TEXT、RAM、RAM++论文解读

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…

使用Sourcetrail解析C项目

阅读源码的工具很多&#xff0c;今天给大家推荐一款别具一格的源码阅读神器。 它就是 Sourcetrail&#xff0c;一个免费开源、跨平台的可视化源码探索项目 使用

释放深度学习的力量:使用 CUDA 和 Turing GPU 构建 AI

深度学习是一种人工智能的分支,它使用神经网络模拟人类大脑的学习过程,从大量的数据中学习特征和规律。深度学习已经彻底改变了无数领域,从图像和语音识别到自然语言处理和自动驾驶汽车。但是,要充分利用深度学习的强大功能,需要强大的工具,而 NVIDIA 的 Turing GPU 就是…

Faster R-CNN pytorch源码血细胞检测实战(二)数据增强

Faster R-CNN pytorch源码血细胞检测实战&#xff08;二&#xff09;数据增强 文章目录 Faster R-CNN pytorch源码血细胞检测实战&#xff08;二&#xff09;数据增强1. 资源&参考2. 数据增强2.1 代码运行2.2 文件存放 3 数据集划分4. 训练&测试5. 总结 1. 资源&参…

静态SOCKS5的未来发展趋势和新兴应用场景

随着网络技术的不断发展和进步&#xff0c;静态SOCKS5代理也在不断地完善和发展。未来&#xff0c;静态SOCKS5代理将会呈现以下发展趋势和新兴应用场景。 一、发展趋势 安全性更高&#xff1a;随着网络安全问题的日益突出&#xff0c;用户对代理服务器的安全性要求也越来越高…

AcWing 3425:小白鼠排队 ← 北京大学考研机试题

【题目来源】https://www.acwing.com/problem/content/3428/【题目描述】 N 只小白鼠&#xff0c;每只鼠头上戴着一顶有颜色的帽子。 现在称出每只白鼠的重量&#xff0c;要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。 帽子的颜色用 red&#xff0c;blue 等字符串来…

c#下载微信跟支付宝交易账单

下载微信交易账单 //账单日期只能下载前一天的string datetime DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");string body "";string URL "/v3/bill/fundflowbill" "?bill_date" datetime;//生成签名认证var auth BuildAu…

nodejs 异步函数加 await 和不加 await 的区别

在 nodejs 中&#xff0c;异步函数加上 await 和不加 await 的区别在于函数的返回值。 当一个异步函数加上 await 时&#xff0c;它会暂停当前函数的执行&#xff0c;直到异步操作完成并返回结果。这意味着可以直接使用异步操作的结果&#xff0c;而不需要使用 .then() 方法或…

什么是私有云和私有云计算?

私有云也被称为本地云架构&#xff0c;部署在企业的内部数据中心。如今&#xff0c;越来越多的提供商提供自己的私有云服务&#xff0c;以增强甚至取代企业自己的私有云环境。 美国国家标准与技术研究所 (NIST) 对私有云的定义是&#xff1a;“云基础架构为单一组织置备并为其…

【华为鸿蒙系统学习】- HarmonyOS4.0开发|自学篇

​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 HarmonyOS 4.0 技术介绍&#xff1a; HarmonyOS三大特征&#xff1a; 1.实现硬件互助&#…

Appium 并行测试多个设备

一、前置说明 在自动化测试中&#xff0c;经常需要验证多台设备的兼容性&#xff0c;Appium可以用同一套测试运例并行测试多个设备&#xff0c;以达到验证兼容性的目的。 解决思路&#xff1a; 查找已连接的所有设备&#xff1b;为每台设备启动相应的Appium Server&#xff1b…

docker的资源控制:

docker的资源控制&#xff1a; 对容器的使用宿主机的资源进行限制 cpu 内存 磁盘i/0 docker使用linux自带的功能cgroup control grouos是linux内核系统提供的一种可以限制&#xff0c;记录&#xff0c;隔离进程所使用的物理资源 control grouos是linux内核系统提供的一种可…

CSP-202309-2 坐标变换(其二)(模拟,c++,vector建二叉树)

计算机软件能力认证考试系统 问题描述 试题编号&#xff1a;202309-3试题名称&#xff1a;梯度求解时间限制&#xff1a;1.0s内存限制&#xff1a;512.0MB问题描述&#xff1a; 背景 西西艾弗岛运营公司近期在大力推广智能化市政管理系统。这套系统是由西西艾弗岛信息中心研发…

DAPP开发【11】IPFS星际文件管理系统【简介,实践看12】

IPFS&#xff08;InterPlanetary File System&#xff09;是一个点对点的分布式文件系统&#xff0c;旨在创建一个更快速、更安全和更开放的 Web。它不同于传统的 HTTP 协议&#xff0c;因为它不需要使用一个固定的地址来访问文件&#xff0c;而是通过一个基于内容寻址的系统&a…