文章目录

  • 定位Android电话的源码及UI
  • 禁止打电话时播放运营商广告视频彩铃
    • 运营商视频彩铃
    • framework禁止播放视频彩铃

需求:打电话时,对方未接听,这个时候可能会播放运营商的视频彩铃,需求是屏蔽彩铃播放。
测试平台:展锐。
安卓版本:13。

定位Android电话的源码及UI

打电话时查看logcat打印

com.android.dialer/com.android.incallui.InCallServiceImpl
start default phone app:com.android.dialerSTART u0 {act=android.intent.action.MAIN flg=0x10040000 cmp=com.android.dialer/com.android.incallui.InCallActivity (has extras)}
com.android.dialer/com.android.incallui.InCallActivity2024-12-24 11:24:39.914  9381-12016 WindowManager           system_server                        D   update app focus from ActivityRecord{9a442d2 u0 com.ntt.n.phone/.mpv.presenter.PhoneKeyboardActivityPresenter t45} to ActivityRecord{c32e28 u0 com.android.dialer/com.android.incallui.InCallActivity t48}
InCallActivity.showMainInCallFragment
InCallFragment.onCreateView

从打印可以大致知道源码及界面类的信息InCallActivity及InCallFragment,
其对应的apk源码在vendor/sprd/platform/packages/apps/SprdDialer目录下,
界面类java/com/android/incallui/InCallActivity.java

 setContentView(R.layout.incall_screen);

其ui内容res/layout/incall_screen.xml比较简短

<!-- In-call Phone UI; see InCallActivity.java. -->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"/><Viewandroid:id="@+id/psuedo_black_screen_overlay"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#000000"android:visibility="gone"android:keepScreenOn="true"/>
</FrameLayout>

禁止打电话时播放运营商广告视频彩铃

运营商视频彩铃

安卓打电话时出现视频彩铃广告是因为对方开通了视频彩铃业务,这是一种基于 VoLTE 技术的运营商业务,被叫方定制后,主叫方在拨打电话等待接通时就可能会看到一段视频媒体来替代普通网络回铃音。
如下图:
在这里插入图片描述
在这里插入图片描述

framework禁止播放视频彩铃

  1. 看log打印
2024-12-24 16:28:55.615 11385-11385 Dialer                  com.android.dialer                   I  VideoPauseController.setUp - enter
2024-12-24 16:28:55.639 11385-11385 Dialer                  com.android.dialer                   I  InCallPresenter.setUp - mIsVideoEnable = true
  1. 定位到代码
    vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/incallui/
    InCallPresenter.java
    关键在于变量isSupportVideoRingTone的值
private boolean[] isSupportVideoRingTone;private void updateCarrierConfiguration(int phoneId, boolean reset) {int subId =  getSubIdByPhoneId(phoneId);UniCarrierConfigManager configManager = new UniCarrierConfigManager(context);PersistableBundle b = null;LogUtil.i("InCallPresenter.updateCarrierConfiguration", "subId:  %d", subId);if (subId != -1 && !reset&& configManager != null && configManager.getConfigForSubId(subId) != null) {b = configManager.getConfigForSubId(subId);isConferenceParticipantLabel[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_CONFERENCE_PARTICIPANT_LABEL);isShowNumberAndName[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_SHOW_NUMBER_AND_NAME);isSupportMultiVideoCall[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SUPPORT_MULTI_VIDEO_CALL);isHdVoiceIconShouldBeRemoved[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_HD_VOICE_ICON_SHOULD_BE_REMOVED);isFeatureHdAudio[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_FEATURE_HD_AUDIO);isSupportVideoRingTone[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SUPPORTS_VIDEO_RING_TONE);isShowHoldButton[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SHOW_HOLD_BUTTON);isSupportVideoCustomerService[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_SUPPORT_VIDEO_CUSTOMER_SERVICE);LogUtil.i("InCallPresenter.updateCarrierConfiguration","getCarrierConfig from subid");} else {isConferenceParticipantLabel[phoneId] = true;isShowNumberAndName[phoneId] = false;isSupportMultiVideoCall[phoneId] = true;isHdVoiceIconShouldBeRemoved[phoneId] = false;isFeatureHdAudio[phoneId] = false;isSupportVideoRingTone [phoneId]= false;isShowHoldButton[phoneId] = true;isSupportVideoCustomerService[phoneId] = false;LogUtil.i("InCallPresenter.updateCarrierConfiguration","use default carrierConfig");}}

          isSupportVideoRingTone[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SUPPORTS_VIDEO_RING_TONE);
  1. 代码修改
    只要固定isSupportVideoRingTone数组中所有值为false就可以避免播放视频彩铃
          isSupportVideoRingTone [phoneId]= false;

修改的patch如下

diff --git a/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/incallui/InCallPresenter.java b/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/incallui/InCallPresenter.java
index 29a2f4836e..a2e2b1206b 100755
--- a/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/incallui/InCallPresenter.java
+++ b/vendor/sprd/platform/packages/apps/SprdDialer/java/com/android/incallui/InCallPresenter.java
@@ -2822,7 +2823,8 @@ public class InCallPresenter implements CallList.Listener, AudioModeProvider.AudisSupportMultiVideoCall[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SUPPORT_MULTI_VIDEO_CALL);isHdVoiceIconShouldBeRemoved[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_HD_VOICE_ICON_SHOULD_BE_REMOVED);isFeatureHdAudio[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_FEATURE_HD_AUDIO);
-          isSupportVideoRingTone[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SUPPORTS_VIDEO_RING_TONE);
+          //isSupportVideoRingTone[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SUPPORTS_VIDEO_RING_TONE);
+          isSupportVideoRingTone [phoneId]= false;isShowHoldButton[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_CARRIER_SHOW_HOLD_BUTTON);isSupportVideoCustomerService[phoneId] = b.getBoolean(UniCarrierConfigManager.KEY_SUPPORT_VIDEO_CUSTOMER_SERVICE);LogUtil.i("InCallPresenter.updateCarrierConfiguration","getCarrierConfig from subid");

作者:帅得不敢出门

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

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

相关文章

WebIDEPLOY 赋能数字校园建设:智慧管理系统的效能升级与实践路径 —— 以校园资源协同优化构建高效教育生态的探索

一、教育数字化转型中的现实困境&#xff1a;从 "管理孤岛" 到 "效率瓶颈"教育数字化转型的加速推进&#xff0c;让智慧校园建设成为高校提升核心竞争力的关键抓手。但当前校园物联网应用中&#xff0c;一系列痛点逐渐凸显&#xff1a;设备管理呈现 "…

开源AI大模型AI智能名片S2B2C商城小程序赋能下的“信息找人“:人工智能驱动的线下零售精准化革命

摘要&#xff1a;在人工智能技术深度渗透零售行业的背景下&#xff0c;线下零售场景正经历从"人找信息"到"信息找人"的范式转变。本文聚焦开源AI大模型、AI智能名片与S2B2C商城小程序的技术融合&#xff0c;系统分析其在客户定位、行为分析、精准营销等环节…

【第三方网站运行环境测试:服务器配置(如Nginx/Apache)的WEB安全测试重点】

服务器配置安全测试是WEB安全评估的关键&#xff0c;一般关注信息泄露、传输安全、访问控制及资源防护等方面。信息泄露控制 检查服务器响应头是否暴露敏感信息。Server头应去除Nginx/Apache详细版本号&#xff0c;防止攻击者针对特定版本漏洞进行利用。错误页面需自定义&#…

【Hot100】15.三数之和

解法&#xff1a;排序 双指针首先对数组排序&#xff0c;便于后面处理重复元素。第一层循环遍历数组中的每一个元素&#xff0c;作为三元组中的第一个元素 nums[i] &#xff0c;并跳过重复的元素。对于每个 i &#xff0c;使用双指针 l &#xff08;初始为 i1&#xff09;和 r…

Flutter 本地持久化存储:Hive 与 SharedPreferences 实战对比

在移动应用开发中&#xff0c;本地持久化存储是必不可少的功能。无论是保存用户登录状态、应用配置&#xff0c;还是缓存数据&#xff0c;合理选择存储方案都能提高应用的性能与用户体验。在 Flutter 中&#xff0c;常用的本地存储方式主要有两种&#xff1a;SharedPreferences…

Lombok 实用注解深度解析!

目录一、AllArgsConstructor&#xff1a;全参数构造函数生成器1. 基本概念2. 使用示例3. 高级特性4. 注意事项二、RequiredArgsConstructor&#xff1a;必需参数构造函数生成器1. 基本概念2. 使用示例3. 高级特性4. 注意事项三、SneakyThrows&#xff1a;异常处理"偷懒&qu…

Go+Gdal 完成高性能GIS数据空间分析

概要 环境准备 技术流程 一、在golang中如何调用gdal 二、读取数据 三、执行空间分析 四、性能提升 小结 概要 Gdal库可以说是所有gis软件的基础&#xff0c;基本上现在所有的工业gis软件都是基于gdal开发的&#xff0c;其主要包括了栅格处理、矢量处理、坐标系处理所涉及的各类…

【python】python进阶——Lambda 函数

目录 引言 一、简介 1.1 基本语法 1.2 优势 1.3 局限性 二、基本用法 2.1 无参数lambda 函数 2.2 多参数 lambda 函数 三、常见使用场景 3.1 与高阶函数配合使用 3.2 作为排序键 3.3 在 GUI 编程中作为回调函数 3.4 在 Pandas 中的应用 四、高级技巧 4.1 条件表…

基于单片机电动车充电桩/充电车棚环境监测设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 随着电动车普及&#xff0c;充电桩的环境安全监测成为重要课题。基于单片机的电动车充电桩环境检…

Linux初始——编译器gcc

编译器gcc编译器编译器自举动静态库动静态库的差异gcc编译器 众所周知&#xff0c;代码运行的前提是经过四个步骤的 预处理&#xff0c;其进行宏替换&#xff0c;去注释&#xff0c;条件编译&#xff0c;头文件展开的工作&#xff0c;在gcc的选项中对应gcc -E&#xff0c;其就…

Three.js + AI预测:在数字孪生中实现数据可视化智能决策

某智慧工厂的数字孪生系统曾陷入尴尬&#xff1a;3D 模型里的生产线数据实时跳动&#xff0c;却没人能预判 “2 小时后哪台机器会停机”。这就像有了高清监控&#xff0c;却不会分析监控画面 ——Three.js 做出的可视化是 “眼睛”&#xff0c;AI 预测才是 “大脑”。不少团队用…

刀客doc:亚马逊持续猛攻程序化广告

文/刀客doc(头条深一度精选作者)一7月的尾声和8月的开端&#xff0c;广告市场见证了两场截然不同的场面。7月31日&#xff0c;亚马逊公布了截至6月30日的2025年第二季度财报。广告业务表现尤为亮眼&#xff1a;单季收入达到157亿美元&#xff0c;同比增长约22%&#xff0c;成为…

政府网站IPv6检测怎么做?检测指标有哪些?

随着信息技术的飞速发展&#xff0c;IPv6作为下一代互联网的核心协议&#xff0c;已成为全球互联网发展的必然趋势。我国政府高度重视IPv6的规模部署和应用推广&#xff0c;明确要求各级政府网站必须完成IPv6改造&#xff0c;以提升网络基础设施的现代化水平&#xff0c;增强网…

有N个控制点的三次B样条曲线转化为多段三阶Bezier曲线的方法

将具有N 个控制点的三次B样条曲线转换为多段三阶Bezier曲线&#xff0c;是计算机图形学和CAD系统中常见的操作。这种转换基于B样条曲线的局部性质以及其与Bezier曲线之间的关系。基本原理三次B样条曲线由一组控制点 P₀, P₁, ..., Pₙ₋₁ 和一个节点向量 U {u₀, u₁, ..., …

chrome好用的浏览器插件

https://ad.infread.com/?utm_sourcebaidu_sem&utm_mediumweb_pc&utm_campaignkeywords_website_translate&bd_vid2831968530895394443 目前我自己觉得比较用的谷歌浏览器翻译插件->沉浸式翻译 个人觉得无论时速度还是准确度都是比较好的

k8s---prometheus 监控

目录 环境准备 下载 kube-prometheus 软件包 下载prometheus 镜像 master节点 master节点导入prometheus软件包 解压 node节点 node节点导入镜像 解压 从tar包中加载镜像 部署 prometheus 修改映射端口 提交 查看pod pod和svc正常启动 deployment daemonset se…

华大时空组学空转图像处理

华大时空组学空转图像处理 library(png) library(tiff) st <- readRDS(01.Stereo-seq/output_all/Demo_Mouse_Kidney/outs/feature_expression/seurat_out.rds) dim(stassays$Spatialcounts) stassays$Spatialcounts[1:4,1:4] coord.df <- data.frame(imagerow st$x, im…

如何在SptingBoot项目中引入swagger生成API文档

目录 背景介绍&#xff0c;swagger的必要性 swagger的引入&#xff1a; 1.首先我们需要在 pom.xml文件中导入jar包 2.给swagger创建一个配置类&#xff1a; 3.为实体类添加注解 4.为controller添加注解 背景介绍&#xff0c;swagger的必要性 自从在2005年前端工程师诞生之…

GD32入门到实战21--输入捕获

我们新建capture_drv.c#include <stdint.h> #include <stdio.h> #include "gd32f30x.h" #include "delay.h"static void GpioInit(void) {rcu_periph_clock_enable(RCU_GPIOA);gpio_init(GPIOA,GPIO_MODE_IN_FLOATING,GPIO_OSPEED_10MHZ,GPIO…

MyBatis 与 MyBatis-Plus 的对比与选择

&#x1f50d; MyBatis 与 MyBatis-Plus 的对比与选择 文章目录&#x1f50d; MyBatis 与 MyBatis-Plus 的对比与选择&#x1f9e0; 一、MyBatis 核心回顾&#x1f4a1; 核心思想与架构定位⚡ 基础使用示例⚠️ MyBatis 的痛点⚡ 二、MyBatis-Plus 功能特性解析&#x1f4a1; M…