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

建设银行网络学习网站青岛网上注册公司官网

建设银行网络学习网站,青岛网上注册公司官网,广州 海珠 建网站,网站空间去哪买前言 今日公司#xff0c;安卓设备的音量显示不正常#xff0c;让我来修复这个bug#xff0c;现在已修复#xff0c;做个博客#xff0c;记录一下#xff0c;以后碰到类似一下子就好解决。 Android音量调节相关 路径 frameworks\base\services\core\java\com\android…前言 今日公司安卓设备的音量显示不正常让我来修复这个bug现在已修复做个博客记录一下以后碰到类似一下子就好解决。 Android音量调节相关 路径 frameworks\base\services\core\java\com\android\server\audio\AudioService.java 这个文件包含了关于android音量调节的代码逻辑。 问题 音量调节那里调小会直接变成0而且过程我发现他会有跳动的感觉。 思路 找到apk调用这个文件的接口添加打印了解对应逻辑。 找到问题点 音量数值对不上音量多次调用onSetStreamVolume函数每个音乐流都调用一次 解决问题 数值对不上修改apk与底层数值对应关系 多次调用把对应干扰流都屏蔽掉 setStreamVolume接口 /*** 设置音频流的音量。** param streamType 要设置音量的音频流类型例如 AudioManager.STREAM_MUSIC。* param index 要设置的音量索引通常是一个在音频流范围内的整数值。* param flags 设置标志包括有关音量设置的额外信息例如 AudioManager.FLAG_FIXED_VOLUME。* param callingPackage 调用该方法的应用程序的包名。* param caller 调用者的标识。* param uid 调用者的用户标识。* param hasModifyAudioSettings 是否有修改音频设置的权限。*/private void setStreamVolume(int streamType, int index, int flags, String callingPackage,String caller, int uid, boolean hasModifyAudioSettings) {if (DEBUG_VOL) {Log.d(TAG, setStreamVolume(stream streamType , index index , calling callingPackage ));}if(streamType ! 3){return ;}// 如果使用了固定音量直接返回if (mUseFixedVolume) {return;}Log.d(TAG, ************************);// 确保音频流类型有效ensureValidStreamType(streamType);// 获取音频流类型别名和对应的音量流状态int streamTypeAlias mStreamVolumeAlias[streamType];VolumeStreamState streamState mStreamStates[streamTypeAlias];// 获取与音频流类型别名对应的设备final int device getDeviceForStream(streamType);int oldIndex;// 如果不是 A2DP 设备并且标志包含了 AudioManager.FLAG_BLUETOOTH_ABS_VOLUME// 则跳过 A2DP 绝对音量控制请求if (!AudioSystem.DEVICE_OUT_ALL_A2DP_SET.contains(device) (flags AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) ! 0) {return;}// 如果是系统调用例如硬件按键检查当前用户以正确处理用户限制if (uid android.os.Process.SYSTEM_UID) {uid UserHandle.getUid(getCurrentUserId(), UserHandle.getAppId(uid));}// 验证调用包和 app op 权限if (!checkNoteAppOp(STREAM_VOLUME_OPS[streamTypeAlias], uid, callingPackage)) {return;}// 在 Android N 及以上版本如果音量调整将切换 Zen 模式// 则检查是否已授予调用包通知策略的访问权限if (isAndroidNPlus(callingPackage) wouldToggleZenMode(getNewRingerMode(streamTypeAlias, index, flags)) !mNm.isNotificationPolicyAccessGrantedForPackage(callingPackage)) {throw new SecurityException(Not allowed to change Do Not Disturb state);}// 如果音量调整在当前 Do Not Disturb 模式下不允许则直接返回if (!volumeAdjustmentAllowedByDnd(streamTypeAlias, flags)) {return;}synchronized (mSafeMediaVolumeStateLock) {// 重置任何挂起的音量命令mPendingVolumeCommand null;// 获取旧的音量索引oldIndex streamState.getIndex(device);// 对索引进行重新缩放Log.d(TAG, 缩放前 indexindex);index index * 10;//rescaleIndex(index * 10, streamType, streamTypeAlias);Log.d(TAG, 缩放后 indexindex);// 如果音频流类型别名是 STREAM_MUSIC// 且设备是 A2DP 设备并且标志不包含 AudioManager.FLAG_BLUETOOTH_ABS_VOLUME// 则发送 Avrcp 绝对音量索引的消息if (streamTypeAlias AudioSystem.STREAM_MUSIC AudioSystem.DEVICE_OUT_ALL_A2DP_SET.contains(device) (flags AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) 0) {if (DEBUG_VOL) {Log.d(TAG, setStreamVolume postSetAvrcpAbsoluteVolumeIndex index index stream streamType);}mDeviceBroker.postSetAvrcpAbsoluteVolumeIndex(index / 10);}// 如果设备是 HEARING_AID 设备且音频流是 HEARING_AID 类型// 则发送设置 HEARING_AID 音量索引的消息if (device AudioSystem.DEVICE_OUT_HEARING_AID streamType getHearingAidStreamType()) {Log.i(TAG, setStreamVolume postSetHearingAidVolumeIndex index index stream streamType);mDeviceBroker.postSetHearingAidVolumeIndex(index, streamType);}// 如果音频流类型别名是 STREAM_MUSIC发送设置系统音频音量的消息if (streamTypeAlias AudioSystem.STREAM_MUSIC) {setSystemAudioVolume(oldIndex, index, getStreamMaxVolume(streamType), flags);}// 清除 AudioManager.FLAG_FIXED_VOLUME 标志flags ~AudioManager.FLAG_FIXED_VOLUME;// 如果音频流类型别名是 STREAM_MUSIC 且是固定音量设备则设置 AudioManager.FLAG_FIXED_VOLUME 标志if (streamTypeAlias AudioSystem.STREAM_MUSIC isFixedVolumeDevice(device)) {flags | AudioManager.FLAG_FIXED_VOLUME;// 对于固定音量设备音量要么为 0要么为允许的最大值if (index ! 0) {if (mSafeMediaVolumeState SAFE_MEDIA_VOLUME_ACTIVE mSafeMediaVolumeDevices.contains(device)) {index safeMediaVolumeIndex(device);} else {index streamState.getMaxIndex();}}Log.d(TAG,STREAM_MUSIC index index);}// 如果音量超出安全范围显示安全音量警告并设置挂起的音量命令if (!checkSafeMediaVolume(streamTypeAlias, index, device)) {mVolumeController.postDisplaySafeVolumeWarning(flags);mPendingVolumeCommand new StreamVolumeCommand(streamType, index, flags, device);} else {// 否则调用 onSetStreamVolume 设置音量onSetStreamVolume(streamType, index, flags, device, caller, hasModifyAudioSettings);// 获取最终的音量索引index mStreamStates[streamType].getIndex(device);Log.d(TAG, 获取最终的音量索引 index index ));}}问题 1关键点 问题 2关键点 结束 轻描淡写的俩个问题看上去简单如果你什么也不知道情况下调试你就知道了。 刚解决完马上发一篇博客帮助更多的人因为有问题找不到答案真的很无助做点力所能及的事情吧。
http://www.hkea.cn/news/14428338/

相关文章:

  • 天津哪里做网站网站建设的培训的感受
  • 网站分析对比策划案网站
  • 色块布局网站首页模板网站留言板有什么用
  • 购物网站代码展示型企业网站例子
  • 响应式网站pad尺寸app设计策划书
  • 公司网站建设解决方案详情页制作
  • 无代码企业网站开发深圳外贸建站与推广
  • 网站建设亿玛酷神奇5厦门手机网站设计公司
  • 网站设计与建设报告手机有办法做网站吗
  • 代理机构做的网站找不到人了怎么办私活做网站
  • 国外源代码下载网站中企中立做的网站好吗
  • 做电影网站解决版权问题市场推广计划书
  • wordpress 不显示缩略图哈尔滨网络优化工程师
  • 四川住房建设和城乡建设厅网站买域名要多少钱一个
  • 对做网站公司的疑问蓝牙app开发软件
  • 江北网站建设价格网页设计培训有工资吗
  • 网站建设维护员是做什么的seo快速排名软件
  • 如何看网站有没有备案小程序获取wordpress背景音乐
  • 阜宁专业做网站的公司wordpress修改网页端口
  • 电子政务网站建设实践报告郑州网络推广哪家口碑好
  • 营销最好的网站建设公司电子商务网站建设需要学什么软件
  • 手机网站大全排行北京网站设计公司yy成都柚米科技15
  • 做ppt的模板的网站有哪些内容商城网站建设方案
  • 电子商务网站平台建设方案网站服务器容量
  • 网站流量查询平台商城网站策划书
  • 企业网站群建设方案电商运营一般要学多久
  • 做平台的网站有哪些内容光明区住房和建设局网站
  • 给人家做网站服务器自己搭吗html教程推荐
  • 甘肃省交通建设项目招投标中心网站网站开发合作合同
  • 做视频在哪个网站找素材怎么制做网站