在以下位置做如下注释掉其中一部分即可(最后面几行):

frameworks / base/services/core/java/com/android/server/audio/AudioService.java

private void adjustStreamVolume(int streamType, int direction, int flags,String callingPackage, String caller, int uid) {if (mUseFixedVolume) {return;}if (DEBUG_VOL) Log.d(TAG, "adjustStreamVolume() stream=" + streamType + ", dir=" + direction+ ", flags=" + flags + ", caller=" + caller);ensureValidDirection(direction);ensureValidStreamType(streamType);boolean isMuteAdjust = isMuteAdjust(direction);if (isMuteAdjust && !isStreamAffectedByMute(streamType)) {return;}// use stream type alias here so that streams with same alias have the same behavior,// including with regard to silent mode control (e.g the use of STREAM_RING below and in// checkForRingerModeChange() in place of STREAM_RING or STREAM_NOTIFICATION)int streamTypeAlias = mStreamVolumeAlias[streamType];VolumeStreamState streamState = mStreamStates[streamTypeAlias];final int device = getDeviceForStream(streamTypeAlias);int aliasIndex = streamState.getIndex(device);boolean adjustVolume = true;int step;// skip a2dp absolute volume control request when the device// is not an a2dp deviceif ((device & AudioSystem.DEVICE_OUT_ALL_A2DP) == 0 &&(flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) != 0) {return;}// If we are being called by the system (e.g. hardware keys) check for current user// so we handle user restrictions correctly.if (uid == android.os.Process.SYSTEM_UID) {uid = UserHandle.getUid(getCurrentUserId(), UserHandle.getAppId(uid));}if (mAppOps.noteOp(STREAM_VOLUME_OPS[streamTypeAlias], uid, callingPackage)!= AppOpsManager.MODE_ALLOWED) {return;}// reset any pending volume commandsynchronized (mSafeMediaVolumeState) {mPendingVolumeCommand = null;}flags &= ~AudioManager.FLAG_FIXED_VOLUME;if ((streamTypeAlias == AudioSystem.STREAM_MUSIC) &&((device & mFixedVolumeDevices) != 0)) {flags |= AudioManager.FLAG_FIXED_VOLUME;// Always toggle between max safe volume and 0 for fixed volume devices where safe// volume is enforced, and max and 0 for the others.// This is simulated by stepping by the full allowed volume rangeif (mSafeMediaVolumeState == SAFE_MEDIA_VOLUME_ACTIVE &&(device & mSafeMediaVolumeDevices) != 0) {step = mSafeMediaVolumeIndex;} else {step = streamState.getMaxIndex();}if (aliasIndex != 0) {aliasIndex = step;}} else {// convert one UI step (+/-1) into a number of internal units on the stream aliasstep = rescaleIndex(10, streamType, streamTypeAlias);}// If either the client forces allowing ringer modes for this adjustment,// or the stream type is one that is affected by ringer modesif (((flags & AudioManager.FLAG_ALLOW_RINGER_MODES) != 0) ||(streamTypeAlias == getUiSoundsStreamType())) {int ringerMode = getRingerModeInternal();// do not vibrate if already in vibrate modeif (ringerMode == AudioManager.RINGER_MODE_VIBRATE) {flags &= ~AudioManager.FLAG_VIBRATE;}// Check if the ringer mode handles this adjustment. If it does we don't// need to adjust the volume further.final int result = checkForRingerModeChange(aliasIndex, direction, step,streamState.mIsMuted, callingPackage, flags);adjustVolume = (result & FLAG_ADJUST_VOLUME) != 0;// If suppressing a volume adjustment in silent mode, display the UI hintif ((result & AudioManager.FLAG_SHOW_SILENT_HINT) != 0) {flags |= AudioManager.FLAG_SHOW_SILENT_HINT;}// If suppressing a volume down adjustment in vibrate mode, display the UI hintif ((result & AudioManager.FLAG_SHOW_VIBRATE_HINT) != 0) {flags |= AudioManager.FLAG_SHOW_VIBRATE_HINT;}}// If the ringermode is suppressing media, prevent changesif (!volumeAdjustmentAllowedByDnd(streamTypeAlias, flags)) {adjustVolume = false;}int oldIndex = mStreamStates[streamType].getIndex(device);if (adjustVolume && (direction != AudioManager.ADJUST_SAME)) {mAudioHandler.removeMessages(MSG_UNMUTE_STREAM);// Check if volume update should be send to AVRCPif (streamTypeAlias == AudioSystem.STREAM_MUSIC &&(device & AudioSystem.DEVICE_OUT_ALL_A2DP) != 0 &&(flags & AudioManager.FLAG_BLUETOOTH_ABS_VOLUME) == 0) {synchronized (mA2dpAvrcpLock) {if (mA2dp != null && mAvrcpAbsVolSupported) {mA2dp.adjustAvrcpAbsoluteVolume(direction);}}}if (isMuteAdjust) {boolean state;if (direction == AudioManager.ADJUST_TOGGLE_MUTE) {state = !streamState.mIsMuted;} else {state = direction == AudioManager.ADJUST_MUTE;}if (streamTypeAlias == AudioSystem.STREAM_MUSIC) {setSystemAudioMute(state);}for (int stream = 0; stream < mStreamStates.length; stream++) {if (streamTypeAlias == mStreamVolumeAlias[stream]) {if (!(readCameraSoundForced()&& (mStreamStates[stream].getStreamType()== AudioSystem.STREAM_SYSTEM_ENFORCED))) {mStreamStates[stream].mute(state);}}}} else if ((direction == AudioManager.ADJUST_RAISE) &&!checkSafeMediaVolume(streamTypeAlias, aliasIndex + step, device)) {Log.e(TAG, "adjustStreamVolume() safe volume index = " + oldIndex);mVolumeController.postDisplaySafeVolumeWarning(flags);} else if (streamState.adjustIndex(direction * step, device, caller)|| streamState.mIsMuted) {// Post message to set system volume (it in turn will post a// message to persist).if (streamState.mIsMuted) {// Unmute the stream if it was previously mutedif (direction == AudioManager.ADJUST_RAISE) {// unmute immediately for volume upstreamState.mute(false);mStreamStates[1].mute(false);}else if (direction == AudioManager.ADJUST_LOWER) {  **//注释掉这个条件中的代码即可**if (mIsSingleVolume) {sendMsg(mAudioHandler, MSG_UNMUTE_STREAM, SENDMSG_QUEUE,streamTypeAlias, flags, null, UNMUTE_STREAM_DELAY);}}}sendMsg(mAudioHandler,MSG_SET_DEVICE_VOLUME,SENDMSG_QUEUE,device,0,streamState,0);}

android 系统中静音后使得音量减键不能解除静音相关推荐

  1. Android系统中固件崩溃后使用uevent机制重新加载固件 流程分析

    [前言] Android系统为了保证各商业公司的利益,允许在系统中使用不开源的固件.因此我们可以看到比如用于音频处理的.用于键盘支持的等等大量固件.既然这么多模块要用到固件,那么我们也有必要来了解一下 ...

  2. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

  3. 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )

    文章目录 一.Android 逆向中使用的 android.permission 权限 二.Android 系统中的 Linux 用户权限 一.Android 逆向中使用的 android.permi ...

  4. Android系统中的进程管理:内存的回收

    本文是Android系统进程管理的第三篇文章.进程管理的前面两篇文章,请参见这里: Android系统中的进程管理:进程的创建 Android系统中的进程管理:进程的优先级 本文适合Android平台 ...

  5. Android 系统中 Location Service 的实现与架构

    定位服务是移动设备上最常用的功能之一,本文以 Android 源码为基础,详细分析了 Android 系统中定位服务的架构和实现. 在 Android 系统中,所有系统服务的实现都是类似的.只要明白其 ...

  6. Android系统中通过shell命令实现wifi的连接控制

    简介 工作中遇到一个"变态"的需求,在android系统中不通过java层控制wifi的连接(主要是修改ap的essid和password),而是需要通过native层实现对wif ...

  7. android系统中如何通过程序打开某个AccessibilityService

    android系统中如何通过程序打开某个AccessibilityService(系统辅助服务)? 通常的做法是注册AccessibilityService(辅助服务)后跳转到设置启动服务页面引导用户 ...

  8. android属于数据库管理系统,详细谈谈Android系统中的SQLite数据库的应用

    数据库是按照数据结构来组织.存储和管理数据的仓库,而在信息话的社会,数据库又不单单仅限与数据的相关内容,现在数据库技术是管理信息系统.办公自动化系统.决策支持系统等各类信息系统的核心部分,而SQL是结 ...

  9. android 音频播放过程,一种Android系统中的音频播放方法与流程

    本申请涉及android系统技术,特别涉及一种android系统中的音频播放方法. 背景技术: 在android系统中,现有的使用audiotrack进行音频播放时,audiotrack应用与andr ...

最新文章

  1. python在金融工程中的用途-金融工程现在用python多吗?
  2. LIBSVM多分类问题 参数详解及实例演示
  3. docker容器化python开发环境_如何 Docker 化 Python Django 应用程序
  4. 【转】QDockWidget 停靠窗口和工具栏
  5. Mongodb sharding转换一个副本集为分片集群
  6. 拓端tecdat|Python贝叶斯回归分析住房负担能力数据集
  7. 详解Java的IO流Part7:PrintStream打印流【完结】
  8. Multisim的学习记录(一)
  9. SharePoint - CAML
  10. Opencv项目实战:03 扫描二维码条形码
  11. MacOS上符号执行模块angr和z3-solver模块的安装
  12. Fixing DSDT
  13. web前端开发浏览器兼容性 - 持续更新
  14. 运维工程师分享7道经典面试题
  15. AI2022:如何在 Illustrator 中创建色板?
  16. 折线迷你图怎么设置_Excel2013如何使用迷你图展示数据?
  17. vSphere HA 准入控制 一、插槽策略准入控制
  18. 在深夜加油站遇见哈利波特
  19. 滁州职业学院计算机,2020年滁州职业技术学院分类职业技能(系统根据考生所填第一志愿发布试卷进行测试)1、机电类专业技能(满分80分)...
  20. 基于Springboot+SpringDataJpa+Freemarker的大学生众筹管理理系统

热门文章

  1. Excel笔记(4)常用函数21-34
  2. java cloassLoader大仙儿
  3. 体验 软考免费刷题 电脑板
  4. Cesium学习笔记
  5. mysql emoy表情_“笑哭”emoji表情过时了,一波“捂脸”大军正在路上
  6. 非常值得收藏的书签栏,程序员学习与设计相关的网站(有附件下载)
  7. 我的世界服务器自动被踢怎么可以进去,我的世界中国版服务器中如何解决玩家作弊的简单方法...
  8. 电脑的ppt打不开计算机二级,打不开电脑中的ppt文件并提示访问出错的解决方法...
  9. 万全r680g7配置raid_联想万全r680g7服务器系统用户手册v1.2
  10. Telegram图文详解-- 编程机器人(谷歌脚本服务)