热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AndroidP修改音量键控制与方向和UI一致

frameworksbaseservicescorejavacomandroidservermediaMediaSessionService.java---amt8788frame



在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

frameworks/base/services/core/java/com/android/server/media/MediaSessionService.java

--- a/mt8788/frameworks/base/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/mt8788/frameworks/base/services/core/java/com/android/server/media/MediaSessionService.java
@@ -81,7 +81,7 @@ import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.KeyEvent;
import android.view.ViewConfiguration;
-
+import android.view.WindowManager;
import com.android.internal.os.BackgroundThread;
import com.android.internal.util.DumpUtils;
import com.android.server.SystemService;
@@ -1434,13 +1434,30 @@ public class MediaSessionService extends SystemService implements Monitor {
boolean down = keyEvent.getAction() == KeyEvent.ACTION_DOWN;
boolean up = keyEvent.getAction() == KeyEvent.ACTION_UP;
int direction = 0;
+ int rotation = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
+ int device_id = keyEvent.getDeviceId();
+ Log.d("addlog", "====================rotation = "+ rotation);
boolean isMute = false;
switch (keyEvent.getKeyCode()) {
case KeyEvent.KEYCODE_VOLUME_UP:
- direction = AudioManager.ADJUST_RAISE;
+ if(device_id==1){
+ direction = (rotation == 0 || rotation == 1) ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE;
+ }else{
+ direction = AudioManager.ADJUST_RAISE;
+ }
break;
case KeyEvent.KEYCODE_VOLUME_DOWN:
- direction = AudioManager.ADJUST_LOWER;
+ if(device_id==1){
+ direction = (rotation == 0 || rotation == 1) ? AudioManager.ADJUST_RAISE : AudioManager.ADJUST_LOWER;
+ }else{
+ direction = AudioManager.ADJUST_LOWER;
+ }
break;
case KeyEvent.KEYCODE_VOLUME_MUTE:
isMute = true;

注:Android O还需修改如下文件:

frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java

--- a/mt8167/frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/mt8167/frameworks/base/core/java/com/android/internal/policy/PhoneWindow.java
@@ -1866,6 +1866,11 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
//Log.i(TAG, "Key down: repeat=" + event.getRepeatCount()
// + " flags=0x" + Integer.toHexString(event.getFlags()));

+ int rotation = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
+ int device_id = event.getDeviceId();
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
case KeyEvent.KEYCODE_VOLUME_DOWN:
@@ -1876,10 +1881,22 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
int direction = 0;
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP:
- direction = AudioManager.ADJUST_RAISE;
+ if(device_id==1){
+ direction = (rotation == 2 || rotation == 1) ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE;
+ }else{
+ direction = AudioManager.ADJUST_RAISE;
+ }
break;
case KeyEvent.KEYCODE_VOLUME_DOWN:
- direction = AudioManager.ADJUST_LOWER;
+ if(device_id==1){
+ direction = (rotation == 2 || rotation == 1) ? AudioManager.ADJUST_RAISE : AudioManager.ADJUST_LOWER;
+ }else{
+ direction = AudioManager.ADJUST_LOWER;
+ }
break;
case KeyEvent.KEYCODE_VOLUME_MUTE:
direction = AudioManager.ADJUST_TOGGLE_MUTE;


推荐阅读
  • Android native层服务例子Bp和Bn
    转入android阵地,被各种权限所阻挠,app写个jni各种没有权限,只能开个native服务,本来android的服务& ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 1.概述在11.0的产品开发中,对于wifi的功能定制需求功能也是挺多的,目前对于wifi模块有这么个需求,要求在提供接口实现删除已连接wifi的需求,所以需要了解wifi相关的 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
  • 第2讲 Android Camera Native Framework 初识cameraserver进程
    本讲是AndroidCameraNativeFramework专题的第2讲,我们初识CameraServer,包括如下内容:Camera ... [详细]
  • 记一次线上环境的内存溢出(java.lang.OutOfMemoryError)
    事故背景今天客户说风控项目有个别用户查询不到数据不是报错就是一直卡在那里,我就去那个接口看了下。一看项目日志今天的都几个g了,平常也就几百兆吧ÿ ... [详细]
  • 嗨,我想用多处理来加速我的代码。但是,apply_async对我不起作用。我试着做一个简单的例子,比如:frommultip ... [详细]
  • 找到:frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\Phon ... [详细]
author-avatar
王婷山东理工_441_796
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有