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.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…