IMS Modify Call (1) send request 发出升级视频请求

移动通信核心网技术总结(五)IMS的信令流程及VoLTE的实现 核心网技术总结(5) 1.IMS的信令流程 注册流程的相关概念 为什么要注册 用户使用IMPU(SIP URI)通信 建立用户当前的IP与其IMPU的对应关系 掌握用户当前的位置信息及业务能力 注册过程的鉴权与认证保证了网络的安全性 归属域和拜访域 归属域:用户的签约数据所在的运营商 拜访域:从归属域之外的其他运营商接入,其他运营商统称为拜访域 IMS网络中,用户无论是在归属域还是拜访域,其注册流程基本步骤是相同的,区别在于PCSCF的位置 鉴权 鉴权就是认证,是用来识别用户身. 阅读详情

upgrade/downgrade 升降级,其实就是ModifyCall

整体示意

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qOwcmkqa-1616577597083)(http://7sbojw.com1.z0.glb.clouddn.com/IMS_modify%20call%20show.jpg)]在这里插入图片描述

图中有两种情况,一种是MT对收到的升级请求做出响应,一种是超时后服务器给双发发送消息。
一个完整的Modify call(upgrade)可以分为4个部分,本文主要讲第一部分发出升级请求。

看一下实际效果图,这个号码是印度的哦大家不要随便打(这个是很久以前的效果图)。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmiE5F4c-1616577597085)(http://7sbojw.com1.z0.glb.clouddn.com/MdifyCall.gif)]

流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqlZFge7-1616577597087)(http://7sbojw.com1.z0.glb.clouddn.com/IMS_MdifyCall.jpg)]在这里插入图片描述

界面入手

packages/apps/InCallUI

packages/apps/InCallUI/src/com/android/incallui/CallButtonFragment.java
CallButtonFragment.java onClick()

case R.id.changeToVideoButton:
   if (call == null) {
       Log.i(this, "Call was null");
       return;
   }
   if (getResources().getBoolean(R.bool.config_regional_number_patterns_video_call) && //默认为false
       !CallUtil.isVideoCallNumValid(call.getNumber())) {
       Toast.makeText(this.getActivity(),
               R.string.toast_change_video_call_failed, Toast.LENGTH_LONG).show();
       return;
   }
   getPresenter().changeToVideoClicked();//切换为视频通话,实际是ModifyCall 后面可以看到调用
   break;

packages/apps/InCallUI/src/com/android/incallui/CallButtonPresenter.java
changeToVideoClicked()
本来还有一个changeToVoiceClick()的,不过没有使用。

public void changeToVideoClicked() {
   final Context context = getUi().getContext();
   if (QtiCallUtils.useExt(context)) {//为true,可以看下面的代码断
       QtiCallUtils.displayModifyCallOptions(mCall, context);//这里
       return;
   }
 
   VideoCall videoCall = mCall.getVideoCall();
   if (videoCall == null) {
       return;
   }
   int currVideoState = mCall.getVideoState();
   int currUnpausedVideoState = CallUtils.getUnPausedVideoState(currVideoState);
   currUnpausedVideoState |= VideoProfile.STATE_BIDIRECTIONAL;
 
   VideoProfile videoProfile = new VideoProfile(currUnpausedVideoState);
   videoCall.sendSessionModifyRequest(videoProfile);
   mCall.setSessionModificationState(Call.SessionModificationState.WAITING_FOR_RESPONSE);
}

packages/apps/InCallUI/src/com/android/incallui/QtiCallUtils.java
QtiCallUtils.java

/**
* Checks the boolean flag in config file to figure out if we are going to use Qti extension or
* not
*/
public static boolean useExt(Context context) {
   if (context == null) {
       Log.w(context, "Context is null...");
   }
   return context != null && context.getResources().getBoolean(R.bool.video_call_use_ext); //默认为true
}

displayModifyCallOptions() 显示选项(早先是在overflow menu中有个modify call选项,点击后弹出4个选项供选择)

/**
* The function is called when Modify Call button gets pressed. The function creates and
* displays modify call options.
*/
 
public static void displayModifyCallOptions(final Call call, final Context context) {
   if (call == null) {
       Log.d(LOG_TAG, "Can't display modify call options. Call is null");
       return;
   }
 
   if (isTtyEnabled(context)) {
       Log.w(LOG_TAG, "Call session modification is allowed only when TTY is off.");
       displayToast(context, R.string.video_call_not_allowed_if_tty_enabled);
       return;
   }
 
   if (context.getResources().getBoolean(
           R.bool.config_enable_enhance_video_call_ui)) {    //false,后面可能会改。
       // selCallType is set to -1 default, if the value is not updated, it is unexpected.
       if (selectType != -1) {
           VideoProfile videoProfile = new VideoProfile(selectType);
           Log.v(LOG_TAG, "Videocall: Enhance videocall: upgrade/downgrade to "
                   + callTypeToString(selectType));
           changeToVideoClicked(call, videoProfile);
       }
       return;
   }
 
   final ArrayList<CharSequence> items = new ArrayList<CharSequence>();
   final ArrayList<Integer> itemToCallType = new ArrayList<Integer>();
   final Resources res = context.getResources();
 
   // Prepare the string array and mapping.//开始准备modify call的dialog
   if (hasVoiceCapabilities(call)) {
       items.add(res.getText(R.string.modify_call_option_voice));
       itemToCallType.add(VideoProfile.STATE_AUDIO_ONLY);//仅语音
   }
 
   if (hasBidirectionalVideoCapabilities(call)) {
       items.add(res.getText(R.string.modify_call_option_vt_rx));
       itemToCallType.add(VideoProfile.STATE_RX_ENABLED);//接收视频,也就是只显示对面的视频
 
       items.add(res.getText(R.string.modify_call_option_vt_tx));
       itemToCallType.add(VideoProfile.STATE_TX_ENABLED);//发送。只发送不接收
 
       items.add(res.getText(R.string.modify_call_option_vt));
       itemToCallType.add(VideoProfile.STATE_BIDIRECTIONAL);//双向,双方视频互相传送。这里客户可能会希望把单向的去掉
   }
 
   AlertDialog.Builder builder = new AlertDialog.Builder(context);
   builder.setTitle(R.string.modify_call_option_title);
   final AlertDialog alert;
 
   DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener() {
       @Override
       public void onClick(DialogInterface dialog, int item) {
           Toast.makeText(context, items.get(item), Toast.LENGTH_SHORT).show();
           final int selCallType = itemToCallType.get(item);
           Log.v(this, "Videocall: ModifyCall: upgrade/downgrade to "
                   + callTypeToString(selCallType));
           VideoProfile videoProfile = new VideoProfile(selCallType);
           changeToVideoClicked(call, videoProfile);//在弹出的窗口上点击以后
           dialog.dismiss();
       }
   };
   final int currUnpausedVideoState = CallUtils.getUnPausedVideoState(call.getVideoState());
   final int index = itemToCallType.indexOf(currUnpausedVideoState);
   builder.setSingleChoiceItems(items.toArray(new CharSequence[0]), index, listener);
   alert = builder.create();
   alert.show();
}

关于 R.bool.config_enable_enhance_video_call_ui 这个值,如果为true的话,modify的几个选项会会直接在CalButton上上显示,(通常是在overFlow menu里)。ehhance UI嘛,就是直接在UI上把那些发送,接收,双向的button或者选项列出来。

changeToVideoClicked()

这个方法同时也被 downgradeToVoiceCall()调用了。可见这部分不能光看方法名字理解它的作用了。

/**
* Sends a session modify request to the telephony framework
*/
private static void changeToVideoClicked(Call call, VideoProfile videoProfile) {
   VideoCall videoCall = call.getVideoCall();
   if (videoCall == null) {
       return;
   }
   videoCall.sendSessionModifyRequest(videoProfile);//发送切换/更改请求
   call.setSessionModificationState(Call.SessionModificationState.WAITING_FOR_RESPONSE);
   InCallAudioManager.getInstance().onModifyCallClicked(call, videoProfile.getVideoState());//同步更改Audio状态
}

frameworks/base/telecomm/java/android/telecom/VideoCallImpl.java

VideoCallImpl.java

/**
* Sends a session modification request to the video provider.
* <p>
* The {@link InCallService} will create the {@code requestProfile} based on the current
* video state (i.e. {@link Call.Details#getVideoState()}).  It is, however, possible that the
* video state maintained by the {@link InCallService} could get out of sync with what is known
* by the {@link android.telecom.Connection.VideoProvider}.  To remove ambiguity, the
* {@link VideoCallImpl} passes along the pre-modify video profile to the {@code VideoProvider}
* to ensure it has full context of the requested change.
*
* @param requestProfile The requested video profile.
*/
public void sendSessionModifyRequest(VideoProfile requestProfile) {
   try {
       VideoProfile originalProfile = new VideoProfile(mCall.getDetails().getVideoState(),
               mVideoQuality);//拿到当前的状态,为什么要当前的?(这个问题在后面有解答,但是被我闪电了。。在高通私有代码部分是没有用到这个参数的,只用了requestProfile)
 
       mVideoProvider.sendSessionModifyRequest(originalProfile, requestProfile);
   } catch (RemoteException e) {
   }
}

frameworks/base/telecomm/java/android/telecom/Connection.java
VideoProviderBinder

/**
* IVideoProvider stub implementation.
*/
private final class VideoProviderBinder extends IVideoProvider.Stub {
 
    public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
       SomeArgs args = SomeArgs.obtain();
       args.arg1 = fromProfile;
       args.arg2 = toProfile;
       mMessageHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget();
    }
}

VideoProviderHandler

case MSG_SEND_SESSION_MODIFY_REQUEST: {
   SomeArgs args = (SomeArgs) msg.obj;
   try {
       onSendSessionModifyRequest((VideoProfile) args.arg1,
               (VideoProfile) args.arg2);
   } finally {
       args.recycle();
   }
   break;
}

frameworks/base/telecomm/java/android/telecom/Connection.java
处理modify请求,判断请求是否可用等。

/**
* Issues a request to modify the properties of the current video session.
* <p>
* Example scenarios include: requesting an audio-only call to be upgraded to a
* bi-directional video call, turning on or off the user's camera, sending a pause signal
* when the {@link InCallService} is no longer the foreground application.
* <p>
* If the {@link VideoProvider} determines a request to be invalid, it should call
* {@link #receiveSessionModifyResponse(int, VideoProfile, VideoProfile)} to report the
* invalid request back to the {@link InCallService}.
* <p>
* Where a request requires confirmation from the user of the peer device, the
* {@link VideoProvider} must communicate the request to the peer device and handle the
* user's response.  {@link #receiveSessionModifyResponse(int, VideoProfile, VideoProfile)}
* is used to inform the {@link InCallService} of the result of the request.
* <p>
* Sent from the {@link InCallService} via
* {@link InCallService.VideoCall#sendSessionModifyRequest(VideoProfile)}.
*
* @param fromProfile The video profile prior to the request.
* @param toProfile The video profile with the requested changes made.
*/
public abstract void onSendSessionModifyRequest(VideoProfile fromProfile,
       VideoProfile toProfile);

frameworks/opt/net/ims/src/java/com/android/ims/internal/ImsVideoCallProviderWrapper.java

重写方法

/** @inheritDoc */
public void onSendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
   try {
       mVideoCallProvider.sendSessionModifyRequest(fromProfile, toProfile);
   } catch (RemoteException e) {
   }
}

frameworks/opt/net/ims/src/java/com/android/ims/internal/ImsVideoCallProvider.java

public void sendSessionModifyRequest(VideoProfile fromProfile, VideoProfile toProfile) {
   SomeArgs args = SomeArgs.obtain();
   args.arg1 = fromProfile;
   args.arg2 = toProfile;
   mProviderHandler.obtainMessage(MSG_SEND_SESSION_MODIFY_REQUEST, args).sendToTarget();
}

mProviderHandler

/**
* Default handler used to consolidate binder method calls onto a single thread.
*/
private final Handler mProviderHandler = new Handler(Looper.getMainLooper()) {
   @Override
   public void handleMessage(Message msg) {
 
        case MSG_SEND_SESSION_MODIFY_REQUEST: {
           SomeArgs args = (SomeArgs) msg.obj;
           try {
               VideoProfile fromProfile = (VideoProfile) args.arg1;
               VideoProfile toProfile = (VideoProfile) args.arg2;
 
               onSendSessionModifyRequest(fromProfile, toProfile);
           } finally {
               args.recycle();
           }
           break;
        }
    ...
    }

vendor/qcom/proprietary/telephony-apps/ims/src/com/qualcomm/ims/vt/ImsVideoCallProviderImpl.java

高通私有代码,不贴了,一般也不会改下层的。

关键log

MO log

03-01 00:12:52.872  4918  4918 D VideoCall_ImsVideoCallProviderImpl: (1) onSendSessionModifyRequest, videoState=0 quality= 4//请求转换为 AUDIO_ONLY
03-01 00:12:52.873  4918  4918 D VideoCall_ImsCallModification: validateOutgoingModifyConnectionType newCallType=0//CalllType 和videoState对应
03-01 00:12:52.873  4918  4918 D VideoCall_ImsCallModification: validateOutgoingModifyConnectionType modifyToCurrCallType = false isIndexValid = true isLowBattery = false
03-01 00:12:52.873  4918  4918 V ImsSenderRxr: modifyCallInitiate callModify=  1  0 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]
03-01 00:12:52.873  4918  4918 V ImsSenderRxr: setCallModify callModify=  1  0 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]
03-01 00:12:52.873  4918  4918 D ImsSenderRxr: [0043]> MODIFY_CALL_INITIATE[SUB1]
03-01 00:12:53.757  4918  5512 D ImsSenderRxr: [0043]< MODIFY_CALL_INITIATE [SUB1]
03-01 00:12:53.758  4918  4918 D VideoCall_ImsCallModification: EVENT_MODIFY_CALL_INITIATE_DONE received
03-01 00:12:53.758  4918  4918 D VideoCall_ImsCallModification: clearPendingModify imsconn=org.codeaurora.ims.ImsCallModification@1ea212
03-01 00:12:53.758  4918  4918 D VideoCall_ImsVideoCallProviderImpl: (1) handleSessionModifyDone msg.what=0 //
03-01 00:12:53.758  4918  4918 D VideoCall_ImsVideoCallProviderImpl: (1) Session modify success//成功切换
 
//upgrade
03-01 00:12:58.120  4918  4918 D VideoCall_ImsVideoCallProviderImpl: (1) onSendSessionModifyRequest, videoState=3 quality= 4
03-01 00:12:58.120  4918  4918 D VideoCall_ImsCallModification: validateOutgoingModifyConnectionType newCallType=3//CalllType 和videoState对应
03-01 00:12:58.120  4918  4918 D VideoCall_ImsCallModification: validateOutgoingModifyConnectionType modifyToCurrCallType = false isIndexValid = true isLowBattery = false
03-01 00:12:58.120  4918  4918 V ImsSenderRxr: modifyCallInitiate callModify=  1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]
03-01 00:12:58.120  4918  4918 V ImsSenderRxr: setCallModify callModify=  1  3 2 callSubState 0 videoPauseState2 mediaId-1 Local Ability  Peer Ability  Cause code 0 0[SUB1]
03-01 00:12:58.120  4918  4918 D ImsSenderRxr: [0044]> MODIFY_CALL_INITIATE[SUB1]
03-01 00:13:02.989  4918  5512 D ImsSenderRxr: [0044]< MODIFY_CALL_INITIATE [SUB1]
03-01 00:13:02.989  4918  4918 D VideoCall_ImsCallModification: EVENT_MODIFY_CALL_INITIATE_DONE received
03-01 00:13:02.989  4918  4918 D VideoCall_ImsCallModification: clearPendingModify imsconn=org.codeaurora.ims.ImsCallModification@1ea212
03-01 00:13:02.990  4918  4918 D VideoCall_ImsVideoCallProviderImpl: (1) handleSessionModifyDone msg.what=0
03-01 00:13:02.990  4918  4918 D VideoCall_ImsVideoCallProviderImpl: (1) Session modify success

小结

InCallUI会根据客户要求进行修改,建议提前熟悉代码,底层基本上不用动,大概跟一下流程就可以了。如果要改bug的话,底层的关键log还是要熟悉,尤其是关键log中携带的参数的意义。这个后面的博客中会提到。

第 36 章:电话与 RIL 无线接口层是 Java 电话框架和厂商调制解调器固件之间的桥梁。早期 RIL 是 C 语言守护进程 rild,通过 Unix 套接字、自定义二进制协议与框架通信。Android12 及以后迁移到稳定 AIDL HAL,把旧的单体 IRadio HIDL 接口拆分为多个按业务域划分的 AIDL 接口。# 列出全部radio‑hal aidl文件# 统计IRadioVoice接口方法数量# 统计IRadioData接口方法数量# 查看语音通话数据结构体Call.aidl。 阅读详情

相关推荐

【信息科学与工程学】【通信工程】第一百五十五篇 网络拓扑学05

编号类型领域问题问题的数学分析(拓扑学+其他)参数列表及参数的数值范围关联知识798图论/组合优化数据中心网络拓扑如何用CXL 3.0的Host-Managed Device Memory (HDM) 优化内存扩展?​1. 拓扑学分析: - CXL 3.0 HDM允许主机将CXL设备的内存作为系统内存的一部分进行管理。主机通过BIOS或操作系统将设备内存添加到NUMA节点,应用程序透明地使用扩展内存,无需修改。 - HDM模型: * 设备内存通过CXL.mem协议映射到主机的物理地址空间。

weixin_49199313的博客 53

通话类型转换流程之AudioCall到VideoCall

这里的通话类型指的是语音通话和视频通话,转换包括upgrade/ downgrade升降级,就是语音通话升级为视频通话、视频通话降级为语音通话。升级为视频通话一般就是包括如下图示的4步,MO发起请求,MT接收请求,MT响应请求,MO接收响应。在实际开发中,无论是需求还是解bug,重点需要关注的是Dialer App中和framework中的流程,Vendor中的高通私有类的流程了解即可,一般不会修改到,对关键log信息要熟悉,便于对此类问题的分析。代码主要包含如下几个路径,时序图最上面也有标识出。

嘿v小米的博客 2334

RT-Thread实战:手把手教你用STM32F04ZGT6通过SPI驱动BMI088(附完整工程)

本文详细介绍了如何使用RT-Thread操作系统在STM32F04ZGT6上通过SPI接口驱动BMI088高性能6轴惯性传感器(包含陀螺仪和加速度计)。从硬件连接到软件配置,再到数据采集与处理,提供了完整的开发指南和优化技巧,帮助开发者快速实现精确的姿态测量功能。

kappa的博客 236

HTTP的请求头标签—IMS(If-Modified-Since)

一、简单介绍 If-Modified-Since:表示浏览器缓存记录中该文件的最后服务器修改时间,由客户端发送给服务器。 (一般If-Modified-Since会与Last-Modified成对出现) Last-Modified:表示服务器本地记录中的文件最后修改时间,由服务器发送给客户端。 二、实验 [^1] (一)步骤 1、清空IE浏览器缓存 2、启动Wireshark 3、在浏览器中输入以...

Haber。 3780

SATA硬件电路设计实战:从接口规范到高速布线技巧

本文深入探讨了SATA硬件电路设计的核心要点与实战技巧。从接口物理电气规范、AC耦合电容与阻抗控制等基础,到FPGA/SoC高速收发器选型配置,再到应对6Gbps高速信号的PCB布局布线艺术,系统性地解析了SATA电路设计中的关键挑战与解决方案,助力工程师规避常见陷阱,实现稳定可靠的存储接口设计。

tech5的博客 529

BIM模型轻量化避坑指南:Revit导出GLTF常见问题及解决方案

本文深入探讨了BIM模型轻量化过程中,从Revit导出GLTF格式时遇到的常见问题与解决方案。针对文件体积膨胀、材质丢失、属性信息缺失等核心痛点,提供了从数据预处理、Draco几何压缩、纹理优化到Web端性能调优的全流程实战指南,帮助工程师高效实现BIM模型在WebGL环境中的流畅展示与交互。

wdx012345的博客 171

IMS Modify Call (2) receive request 收到视频升级请求

主要内容为MT收到视频升级的请求的过程,也是MT消息上传的过程。流程图,关键代码,关键log。

十橙 3466

Agent驱动电商运营:从选品到售后的全链路革新

在当今竞争激烈的电商市场中,传统的电商运营模式面临着诸多挑战。从选品到售后,每个环节都需要大量的人力投入和专业知识。选品需要深入了解市场趋势和消费者需求,营销需要精准定位目标用户,客服需要24小时响应用户咨询。这些工作不仅耗时耗力,而且容易受到人为因素的影响,导致效率低下和成本高企。AI Agent是一种能够感知环境、做出决策并采取行动的智能系统。感知能力:能够获取和处理环境信息。决策能力:能够根据感知到的信息做出决策。行动能力:能够执行决策,对环境产生影响。学习能力。

AI 领航者的博客 354

IMS Modify Call (3) accept reject timeout 接受/拒接/超时 视频升级请求

本文内容包括语音电话中MT端收到视频升级请求后,做出响应的消息下发和不同响应的关键log。 流程图 已接受VT请求为例 代码段 代码比较少,感觉也不复杂的样子,基本上也不会改这个流程。 package/apps/InCallUI AnswerPresenter.java 参数videoState,除了0以外,其他用来表示是但双向视频,不过我们已经改成只保留双向了。

u014386544的博客 832

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(I)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其物理特性及数值仿真总体方案进行介绍与讨论。

忘了面孔的Batou 452

orin+96712接GMSL2相机调试经验

orin gmsl camera调试

乐于分享 4455

IMS Modify Call send request 发出升级视频请求

upgrade/downgrade 升降级,其实就是ModifyCall 流程图 界面入手 packages/apps/InCallUI packages/apps/InCallUI/src/com/android/incallui/CallButtonFragment.Java CallButtonFragment.java onClick() case R.id.c

u014386544的博客 1393

Megatron-LM中的TP、PP、DP、SP、CP并行

SP主要优化的是激活内存,它沿序列维度切分部分激活,适用于较短序列并行。CP主要解决的是长序列的显存问题,它沿序列维度切分所有激活和输入,并且对注意力机制也进行并行处理。二者可以组合使用,特别是当 TP > 1 并且需要处理长序列时,通过启用 SP 和 CP 可以最大化地优化内存使用和加速计算。

u013250861的博客 860

Android Google XTS

GMS全称为Google Mobile Service,即谷歌移动服务。GMS是Google开发并推动Android的动力,是Google提供的Mobile Device上的一系列应用服务。

qq_27672101的博客 2174

使用SSC添加大量的SDO条目

使用SSC添加大量的SDO条目 SSC用表格添加SDO,PDO部分必须指定到0x1600和0x1A00分配TxPdo和RxPdo映射,在0x1C12和0x1C13分别分配到SM2和SM3。在0x6000和0x7000未指定的entry就是SDO部分。

PI_sunyang的博客 3165

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

简单去除安卓Q类原生系统“SIM1支持高清”通知

文章目录问题描述准备环境提取APK文件反编译修改bools.xml文件回编译用修改后的替代原有ims最后 问题描述 自安卓支持VoLTE(高清语音)后,在原生/类原生系统中使用具备VoLTE功能的SIM卡并在设置中开启该功能后,会有一条“SIM1支持高清”常驻通知栏,在通知管理中也无法将其关闭。之前已有类似教程,但对安卓Q似乎已经失效,我在误打误撞中找到一个可行方案,下面为大家详细介绍。 准备环境 手机需要root!需要root!root! 我们将使用Apktool点击下载(蓝奏云)工具进行反编译、回编译

YanXiaoxi_123的博客 8970

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

红米K40重启的解决方案

红米K40重启的问题是最近才出现的,并且重启了以后有时候无法进入系统,特别是重启上四五次甚至是10次,要不然就清除数据才能进入系统,我这个手机是解锁的手机。刚开始认为是手机过热的原因造成的,然后买了手机散热器对手机进行散热,在使用过程中发现,手机即使在不热的情况下也会重启,造成数据的丢失,这就让我引起了很大的注意,可能是手机内部系统的问题,特别是小米的miui系统,不允许禁止应用商店和浏览器这些程序,如果这些程序禁用的话,手机会重启,并且会清除所有的数据,容易造成卡米的现象。再一次重启后将系统数据全部清除,

jonepjxh的博客 4万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IMS Modify Call (3) accept reject timeout 接受/拒接/超时 视频升级请求

这段时间在印度出差,抓了好多当地网络下IMS电话的log,蛤蛤。本文内容包括语音电话中MT端收到视频升级请求后,做出响应的消息下发和不同响应的关键log。流程图已接受VT请求为例代码段代码比较少,感觉也不复杂的样子,基本上也不会改这个流程。package/apps/InCallUIAnswerPresenter.java参数videoState,除了0以外,其他用来表示是但双向视频,不过我们已经改...

十橙 1874

MIUI14包名列表及其用途解释

MIUI14包名列表及其用途解释

犀牛上的犀牛鸟 4万+

Android 9.0 视频通话流程

被升级方收到视频邀请流程: 1、RILD 接收到,+EIMSCMODE 命令(用来定义视频通话和语音通话之间的切换) 2、ImsRILAdapter.java vendor\proprietary\packages\services\Ims\src\com\mediatek\ims\ril 给ImsRILAdapter发送RIL_UNSOL_VIDEO_CAPABILITY_INDICATOR 信...

yaoming168的专栏 5417

浅析IMS网络中使用的标识

浅析IMS网络中使用的标识 刘艳 (广西区通信产业服务有限公司,广西  南宁 530023)   摘要: IMS网络中已经不存在PSTN或NGN网络中信令点或GT的概念。全IP的网络结构和灵活的业务决定了其所用的标识不同于传统的PSTN和NGN。本文在URI的基础上对IMS网络中使用的标识进行了讨论,并探讨了IMS用户使用的IMPU、IMPI及它们之间的关系。 关键词:IMS; TEL

b02330224的专栏 9777

IMS/SIP学习(4)——subscribe、notify、invite过程

IMS/SIP学习(4)——subscribe、notify、invite过程

通信小黑的博客 1万+

如何卸载Android自带系统应用

2022年年底,小米正式发布了MIUI14,说MIUI14可以删除8个核心应用以外的所有应用。然而我更新MIUI14后,并不像说的那样,再一次被当猴耍了。转念一想,国产的room怎么会做到这么良心呢?

zhaojun的博客 1万+

玩机搞机---卸载内置软件 无root权限卸载不需要的软件 安全卸载

卸载应用:adb shell pm uninstall --user 0 应用包名。查看手机已装应用列表:adb shell pm list packages。禁用应用:adb shell pm disable-user 应用包名。开启应用:adb shell pm enable 应用包名。这类软件和相关的脚本也很多。二 第三方软件进行卸载内置。类似卸载即可,一定要注意名字。

小马哥的专栏 3万+

卸载vivo手机自带的应用程序

https://bbs.nubia.cn/thread-960835-1-1.html vivo应用列表 http://bbs.xiaomi.cn/t-13228624-n3 小米可删应用 1.下载刷机大师 2.手机开启usb调试连接到电脑 3.手机端选择传输文件 4.打开刷机大师安装驱动并打开工具中的adb 并在手机端点击一律允许计算机调试 5.输入命令:adb sh...

dh5939的博客 1万+
上一篇: Android M InCallUI动画简析
下一篇: IMS Modify Call (2) receive request 收到视频升级请求
十橙
博客等级 码龄24年 312粉丝 95原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值