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

Android Framework打电话禁止播放运营商视频彩铃

文章目录

  • 定位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.xdnf.cn/news/1421857.html

相关文章:

  • FastLED库完全指南:打造炫酷LED灯光效果
  • 线程池发生了异常该怎么处理?
  • 多校区学校押金原路退回系统之免安装使用教程——东方仙盟
  • 本地部署开源临时文本分享服务 PrivateBin 并实现外部访问( Windows 版本)
  • AOSP 目录及其作用
  • Minecraft(我的世界)服务器信息查询免费API接口详解
  • golang 14并发编程
  • 轻量实现 OCPP 1.6 JSON 协议(欧洲版)的充电桩调试平台
  • Google Gemini 2.5 Flash Image(Nano-Banana)震撼登场!人人都能免费用的AI修图神器!
  • SQL执行过程及原理详解
  • AI + 机器人:当大语言模型赋予机械 “思考能力”,未来工厂将迎来怎样变革?
  • 三、SVN实践练习指南
  • 轻量级注意力模型HOTSPOT-YOLO:无人机光伏热异常检测新SOTA,mAP高达90.8%
  • Swift 解法详解:LeetCode 368《最大整除子集》
  • 【牛客JZ31】—栈的压入弹出序列判断算法详解
  • FPGA中的亚稳态与跨时钟域数据撕裂现象
  • 眼底病害图像分类数据集
  • MYSQL速通(4/5)
  • KL Loss
  • Python OpenCV图像处理与深度学习:Python OpenCV图像滤波入门
  • [系统架构设计师]论文(二十三)
  • 基于SpringBoot+MYSQL开发的师生成果管理系统
  • 美术馆预约小程序|基于微信小程序的美术馆预约平台设计与实现(源码+数据库+文档)
  • zotero.sqlite已损坏
  • 第9篇:监控与运维 - 集成Actuator健康检查
  • 『C++成长记』vector模拟实现
  • 车载总线架构 --- 车载LIN总线传输层概述
  • 百胜软件获邀出席第七届中国智慧零售大会,智能中台助力品牌零售数智变革
  • C++ 虚继承:破解菱形继承的“双亲困境”
  • 【macOS】垃圾箱中文件无法清理的--特殊方法