RK3588 遥控器按键长按 0、1、2、3 键跳转指定 APP

2024-04-11 22:44

本文主要是介绍RK3588 遥控器按键长按 0、1、2、3 键跳转指定 APP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

diff --git a/RK3588_Source/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/RK3588_Source/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index b090d47679f…6805d065ad6 100755
— a/RK3588_Source/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/RK3588_Source/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

@@ -733,6 +733,23 @@ public class PhoneWindowManager implements WindowManagerPolicy {case MSG_RINGER_TOGGLE_CHORD:handleRingerChordGesture();break;
+                //cczheng add for KEYCODE_0 KEYCODE_1 KEYCODE_2 KEYCODE_3 longpress  
+                case MSG_KEY0_LONG_PRESS:
+                    mKey0Handled = true;
+                    customKeyLongPress(pkgName0);
+                    break;
+                case MSG_KEY1_LONG_PRESS:
+                    mKey1Handled = true;
+                    customKeyLongPress(pkgName1);
+                    break;
+                case MSG_KEY2_LONG_PRESS:
+                    mKey2Handled = true;
+                    customKeyLongPress(pkgName2);
+                    break;
+                case MSG_KEY3_LONG_PRESS:
+                    mKey3Handled = true;
+                    customKeyLongPress(pkgName3);
+                    break;//end}}}@@ -3508,6 +3545,102 @@ public class PhoneWindowManager implements WindowManagerPolicy {}}+    //cczheng add for KEYCODE_0 KEYCODE_1 KEYCODE_2 KEYCODE_3 longpress
+    private static final int MSG_KEY0_LONG_PRESS = 133;
+    private static final int MSG_KEY1_LONG_PRESS = 130;
+    private static final int MSG_KEY2_LONG_PRESS = 131;
+    private static final int MSG_KEY3_LONG_PRESS = 132;
+       
+    private final String pkgName0 = "com.android.tv.settings";
+    private final String pkgName1 = "com.liskovsoft.smarttubetv.beta";
+    private final String pkgName2 = "org.xbmc.kodi";
+    private final String pkgName3 = "com.ss.android.ugc.trill";
+    volatile boolean mKey0Handled;
+    volatile boolean mKey1Handled;
+    volatile boolean mKey2Handled;
+    volatile boolean mKey3Handled;
+   
+    private void handleKey0Button(KeyEvent event) {
+        final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+        if (down) {
+            Message msg = mHandler.obtainMessage(MSG_KEY0_LONG_PRESS);
+            msg.setAsynchronous(true);
+            mHandler.sendMessageDelayed(msg, 3000);
+            mKey0Handled = false;
+            Log.d(TAG, "handleKey0Button delayed=");
+        }else{
+            if (!mKey0Handled) {
+                mKey0Handled = true;
+                mHandler.removeMessages(MSG_KEY0_LONG_PRESS);
+                Log.i(TAG, "handleKey0Button removeMessages=");
+            }
+        }
+    }
+
+    private void handleKey1Button(KeyEvent event) {
+        final int repeatCount = event.getRepeatCount();
+        final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+        final boolean canceled = event.isCanceled();
+        Log.d(TAG, "repeatCount="+repeatCount+" canceled="+canceled+" down="+down);
+        if (down) {
+            Message msg = mHandler.obtainMessage(MSG_KEY1_LONG_PRESS);
+            msg.setAsynchronous(true);
+            mHandler.sendMessageDelayed(msg, 3000);
+            mKey1Handled = false;
+        }else{
+            if (!mKey1Handled) {
+                mKey1Handled = true;
+                mHandler.removeMessages(MSG_KEY1_LONG_PRESS);
+            }
+        }
+    }
+
+    private void handleKey2Button(KeyEvent event) {
+        final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+        if (down) {
+            Message msg = mHandler.obtainMessage(MSG_KEY2_LONG_PRESS);
+            msg.setAsynchronous(true);
+            mHandler.sendMessageDelayed(msg, 3000);
+            mKey2Handled = false;
+        }else{
+            if (!mKey2Handled) {
+                mKey2Handled = true;
+                mHandler.removeMessages(MSG_KEY2_LONG_PRESS);
+            }
+        }
+    }
+    private void handleKey3Button(KeyEvent event) {
+        final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
+        if (down) {
+            Message msg = mHandler.obtainMessage(MSG_KEY3_LONG_PRESS);
+            msg.setAsynchronous(true);
+            mHandler.sendMessageDelayed(msg, 3000);
+            mKey3Handled = false;
+        }else{
+            if (!mKey3Handled) {
+                mKey3Handled = true;
+                mHandler.removeMessages(MSG_KEY3_LONG_PRESS);
+            }
+        }
+    }
+
+    private void customKeyLongPress(String pkgName){
+        Intent intent = mContext.getPackageManager().getLaunchIntentForPackage(pkgName);
+        if (intent != null) {
+             intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+             intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
+             try {
+                 mContext.startActivity(intent);
+             } catch (Exception e) {
+                 e.printStackTrace();
+             }
+         }
+        Log.i(TAG, "customKeyLongPress done ....");
+    }//end
+
+    
+void initializeHdmiStateInternal() {boolean plugged = false;// watch for HDMI plug messages if the hdmi switch exists
@@ -3588,7 +3721,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {final int displayId = event.getDisplayId();final boolean isInjected = (policyFlags & WindowManagerPolicy.FLAG_INJECTED) != 0;-        if (DEBUG_INPUT) {
+        //if (DEBUG_INPUT) {// If screen is off then we treat the case where the keyguard is open but hidden// the same as if it were open and in front.// This will prevent any keys other than the power button from waking the screen
@@ -3599,7 +3732,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {Log.d(TAG, "interceptKeyTq keycode=" + keyCode+ " interactive=" + interactive + " keyguardActive=" + keyguardActive+ " policyFlags=" + Integer.toHexString(policyFlags));
-        }
+        //}// Basic policy based on interactive state.int result;
@@ -3700,6 +3833,24 @@ public class PhoneWindowManager implements WindowManagerPolicy {// Handle special keys.switch (keyCode) {
+            //cczheng add for KEYCODE_0 KEYCODE_1 KEYCODE_2 KEYCODE_3 longpress
+            case KeyEvent.KEYCODE_0: {
+                handleKey0Button(event);
+                break;
+            }
+            case KeyEvent.KEYCODE_1: {
+                handleKey1Button(event);
+                break;
+            }
+            case KeyEvent.KEYCODE_2: {
+                handleKey2Button(event);
+                break;
+            }
+            case KeyEvent.KEYCODE_3: {
+                handleKey3Button(event);
+                break;
+            }//end
+case KeyEvent.KEYCODE_BACK: {if (down) {mBackKeyHandled = false;

这篇关于RK3588 遥控器按键长按 0、1、2、3 键跳转指定 APP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/895370

相关文章

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt