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

解决Lemuroid识别不到蓝牙键盘的问题

Android系统基于libretro的全能游戏模拟器,目前有RetroArch,Kodi,Lemuroid。
而且这三个都是开源免费的APP。

Lemuroid相对前面两个功能比较简陋。也不能自己下载核心。但代码也是最少的。

在使用Lemuroid的时候,发现它不能检测出我的蓝牙键盘,也就不能用蓝牙键盘操作游戏。

经过一番研究找到了问题所在,在此做一个笔记。


不知什么原因,作者对android系统的输入设备做了一个过滤:

源码文件在:lemuroid-app\src\main\java\com\swordfish\lemuroid\app\shared\input\InputDeviceManager.kt
如下代码,在获取所有输入设备时对设备列表进行了过滤,删掉.filter的两行代码就好了。

    private fun getAllGamePads(): List<InputDevice> {return runCatching {InputDevice.getDeviceIds().map { InputDevice.getDevice(it) }.filter { it.getLemuroidInputDevice().isSupported() }.filter { it.name !in BLACKLISTED_DEVICES }.sortedBy { it.controllerNumber }}.getOrNull() ?: listOf()}

如果不想自己编译,可以找官方编译的APK进行反编译再修改。

针对smali的修改,主要是去掉两个if-eqz的判断。
不同的版本,修改位置不一样,下面的smali代码仅供参考:

    invoke-interface {v3}, Lm4/a;->a()Zmove-result v3if-eqz v3, :cond_1 #删除此行invoke-interface {v0, v2}, Ljava/util/Collection;->add(Ljava/lang/Object;)Zgoto :goto_1.line 9:cond_2new-instance v1, Ljava/util/ArrayList;invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V.line 10invoke-interface {v0}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;move-result-object v0:cond_3:goto_2invoke-interface {v0}, Ljava/util/Iterator;->hasNext()Zmove-result v2if-eqz v2, :cond_4invoke-interface {v0}, Ljava/util/Iterator;->next()Ljava/lang/Object;move-result-object v2move-object v3, v2check-cast v3, Landroid/view/InputDevice;.line 11sget-object v4, Lk4/b;->f:Ljava/util/Set;invoke-virtual {v3}, Landroid/view/InputDevice;->getName()Ljava/lang/String;move-result-object v3invoke-interface {v4, v3}, Ljava/util/Set;->contains(Ljava/lang/Object;)Zmove-result v3xor-int/lit8 v3, v3, 0x1if-eqz v3, :cond_3 #删除此行invoke-interface {v1, v2}, Ljava/util/Collection;->add(Ljava/lang/Object;)Z

相关文章:

解决Lemuroid识别不到蓝牙键盘的问题

Android系统基于libretro的全能游戏模拟器&#xff0c;目前有RetroArch&#xff0c;Kodi&#xff0c;Lemuroid。 而且这三个都是开源免费的APP。 Lemuroid相对前面两个功能比较简陋。也不能自己下载核心。但代码也是最少的。 在使用Lemuroid的时候&#xff0c;发现它不能检测…...

SpringBoot 使用 Sa-Token 完成权限认证

一、设计思路 所谓权限认证&#xff0c;核心逻辑就是判断一个账号是否拥有指定权限&#xff1a; 有&#xff0c;就让你通过。没有&#xff1f;那么禁止访问&#xff01; 深入到底层数据中&#xff0c;就是每个账号都会拥有一个权限码集合&#xff0c;框架来校验这个集合中是…...

Spring核心与设计思想、创建与使用

文章目录 一、Spring是什么二、为什么要学习框架三、IoC和DI&#xff08;一&#xff09;IoC1. 认识IoC2. Spring的核心功能 &#xff08;二&#xff09;DI 四、Spring项目的创建&#xff08;一&#xff09;使用 Maven 方式创建一个 Spring 项目 五、Spring项目的使用&#xff0…...

mysql 备份 还原

1:备份 执行命令方案1: /usr/local/mysql/bin/mysqldump -uX -pX -h 127.0.0.1 --set-gtid-purgedOFF --skip-extended-insert --add-drop-table --add-locks --create-options --disable-keys --lock-tables --quick --set-charset -e --max_allowed_packet16777216 --net_b…...

每日学术速递4.26

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.AutoNeRF: Training Implicit Scene Representations with Autonomous Agents 标题&#xff1a;AutoNeRF&#xff1a;使用自主代理训练隐式场景表示 作者&#xff1a;Pierre Marz…...

RabbitMQ使用StringRedisTemplate-防止重复消费

造成重复消费的原因&#xff1a; MQ向消费者推送message&#xff0c;消费者向MQ返回ack&#xff0c;告知所推送的消息消费成功。但是由于网络波动等原因&#xff0c;可能造成消费者向MQ返回的ack丢失。MQ长时间&#xff08;一分钟&#xff09;收不到ack&#xff0c;于是会向消…...

临沂大学张继群寄语

目录 寄语 1、不能有不良睹好 2、坚毅的个性和勤奋的品质 3、会存钱...

线程学习笔记

1:Thread 线程的生命周期控制 2:Runnable 可执行的任务和程序 3:Callable 执行程序后返回结果 4:Future 收集程序返回结果 5:Executor 线程池 6:ForkJoin 默认线程池 每个线程有工作队列 工作窃取 7:RunnableFuture FutureTask 实现 Runnable 和 Future 执…...

代码随想录算法训练营第四十二天|01背包问题,你该了解这些!、01背包问题,你该了解这些! 滚动数组 、416. 分割等和子集

文章目录 01背包问题&#xff0c;你该了解这些&#xff01;01背包问题&#xff0c;你该了解这些&#xff01; 滚动数组416. 分割等和子集 01背包问题&#xff0c;你该了解这些&#xff01; 题目链接&#xff1a;代码随想录 二维数组解决0-1背包问题 解题思路&#xff1a; 1.dp…...

结构体指针、数组指针和结构体数组指针

结构体指针 首先让我们定义结构体&#xff1a; struct stu { char name[20]; long number; float score[4]; }; 再定义指向结构体类型变量的指针变量&#xff1a; struct stu *student; /*定义结构体类型指针*/ student malloc(sizeof(struct stu)); /*为指针变量分…...

项目架构一些注意点

考虑系统的 稳定性 一、微服务的稳定性 1、如何解决那些不稳定的因素/问题&#xff1f;也是常说的如何容错。 2、一个系统的高可用取决于它本身和其强依赖的组件的高可用 3、消除单点 保活机制 健康检查 注册中心如何保障稳定性 注册中心集群 微服务本身对注册信息的本地持…...

Forefront GPT-4免费版:开启无限畅聊时代,乐享人工智能快感,无限制“白嫖”,还能和N多角色一起聊天?赶紧注册,再过些时间估计就要收费了

目录 前言注册登录方式应用体验聊天体验绘图体验 “是打算先免费后收费吗&#xff1f;”建议其它资料下载 前言 近期&#xff0c;人工智能技术迎来重大飞跃&#xff0c;OpenAI的ChatGPT等工具成为全球数亿人探索提高生产力和增强创造力的新方法。人们现在可以使用人工智能驱动…...

深入浅出 Compose Compiler(1) Kotlin Compiler KCP

前言 Compose 的语法简洁、代码效率非常高&#xff0c;这主要得益于 Compose Compiler 的一系列编译期魔法&#xff0c;帮开发者生成了很多样板代码。但编译期插桩也阻碍了我们对于 Compose 运行原理的认知&#xff0c;想要真正读懂 Compose 就必须先了解它的 Compiler。本系列…...

BatchNormalization和LayerNormalization的理解、适用范围、PyTorch代码示例

文章目录 为什么要NormalizationBatchNormLayerNormtorch代码示例 学习神经网络归一化时&#xff0c;文章形形色色&#xff0c;但没找到适合小白通俗易懂且全面的。学习过后&#xff0c;特此记录。 为什么要Normalization 当输入数据量级极大或极小时&#xff0c;为保证输出数…...

大数据 | 实验二:文档倒排索引算法实现

文章目录 &#x1f4da;实验目的&#x1f4da;实验平台&#x1f4da;实验内容&#x1f407;在本地编写程序和调试&#x1f955;代码框架思路&#x1f955;代码实现 &#x1f407;在集群上提交作业并执行&#x1f955;在集群上提交作业并执行&#xff0c;同本地执行相比即需修改…...

Java文档注释-JavaDoc标签

标签含义author指定作者{code}使用代码字体以原样显示信息&#xff0c;不处理HTML样式deprecated指定程序元素已经过时{docRoot}指定当前文档的根目录路径exception标识由方法或构造函数抛出的异常{inheritDoc}从直接超类中继承注释{link}插入指向另外一个主题的内联链接{linkp…...

黑盒测试过程中【测试方法】详解5-输入域,输出域,猜错法

在黑盒测试过程中&#xff0c;有9种常用的方法&#xff1a;1.等价类划分 2.边界值分析 3.判定表法 4.正交实验法 5.流程图分析 6.因果图法 7.输入域覆盖法 8.输出域覆盖法 9.猜错法 黑盒测试过程中【测试方法】讲解1-等价类&#xff0c;边界值&#xff0c;判定表_朝一…...

Python学习之sh(shell脚本)在Python中的使用

文章目录 前言一、sh是什么&#xff1f;二、使用步骤1.安装2.使用示例3.使用sh执行命令4.关键字参数5.查找命令6.Baking参数 前言 本文章向大家介绍[Python库]分析一个python库–sh&#xff08;系统调用&#xff09;&#xff0c;主要内容包括其使用实例、应用技巧、基本知识点…...

追求卓越:编写高质量代码的方法和技巧

本文讨论了编写高质量代码的重要性&#xff0c;并详细介绍了高质量代码的特征、编程实践技巧和软件工程方法论。通过遵循这些原则和实践&#xff0c;程序员可以编写出更稳定、可维护和可扩展的代码。 一、 前言 写出高质量代码是每个程序员的追求和目标。高质量的代码可以使程…...

MATLAB算法实战应用案例精讲-【人工智能】机器视觉(概念篇)(最终篇)

目录 前言 几个高频面试题目 如何评价一个光源的好坏? 如何依靠光源增强图像对比度?...

【老王读SpringMVC-3】根据 url 是如何找到 controller method 的?

前面分析了 request 与 handler method 映射关系的注册&#xff0c;现在再来分析一下 SpringMVC 是如何根据 request 来获取对应的 handler method 的? 可能有人会说&#xff0c;既然已经将 request 与 handler method 映射关系注册保存在了 AbstractHandlerMethodMapping.Ma…...

人机交互到艺术设计及玫瑰花绘制实例

Python库之图形用户界面 Riverbank Computing | Introduction Welcome to wxPython! | wxPython Overview — PyGObject Python库之游戏开发 https://www.pygame.org/news Panda3D | Open Source Framework for 3D Rendering & Games python.cocos2d.org Python库之…...

多臂老虎机问题

1.问题简介 多臂老虎机问题可以被看作简化版的强化学习问题&#xff0c;算是最简单的“和环境交互中的学习”的一种形式&#xff0c;不存在状态信息&#xff0c;只有动作和奖励。多臂老虎机中的探索与利用&#xff08;exploration vs. exploitation&#xff09;问题一直以来都…...

DNS 查询原理详解

DNS&#xff08;Domain Name System&#xff09;是互联网上的一种命名系统&#xff0c;它将域名转换为IP地址。在进行DNS查询时&#xff0c;先要明确需要查询的主机名&#xff0c;然后向本地DNS服务器发出查询请求。 1. 本地DNS服务器查询 当用户在浏览器中输入一个URL或者点…...

浅谈软件测试工程师的技能树

软件测试工程师是一个历史很悠久的职位&#xff0c;可以说从有软件开发这个行业以来&#xff0c;就开始有了软件测试工程师的角色。随着时代的发展&#xff0c;软件测试工程师的角色和职责也在悄然发生着变化&#xff0c;从一开始单纯的在瀑布式开发流程中担任测试阶段的执行者…...

转型产业互联网,新氧能否再造辉煌?

近年来&#xff0c;“颜值经济”推动医美行业快速发展&#xff0c;在利润驱动下&#xff0c;除了专注医美赛道的企业之外&#xff0c;也有不少第三方互联网平台正强势进入医美领域&#xff0c;使以新氧为代表的医美企业面对不小发展压力&#xff0c;同时也展现出强大的发展韧性…...

CRE66365 应用资料

CRE66365是一款高度集成的电流模式PWM控制IC&#xff0c;为高性能、低待机功耗和低成本的隔离型反激转换器。在正常负载条件下&#xff0c;AC输入高电压下工作在QR模式。为了最大限度地减少开关损耗&#xff0c;QR 模式下的最大开关频率被内部限制为 77kHz。当负载较低时&#…...

vue3快速上手学习笔记,还不快来看看?

Vue3快速上手 1.Vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/release…...

HDU 5927 Auxiliary Set

原题链接&#xff1a; https://acm.hdu.edu.cn/showproblem.php?pid5927 题意&#xff1a; 有一颗根节点是1的树&#xff0c;其中有重要的点和不重要的点&#xff0c;重要的点需满足以下两个条件至少一个&#xff1a; 1.本来就是重要的点 2.是两个重要的点的最近共同祖先 有t…...

24:若所有参数皆需类型转换,请为此采用non-member函数

令class支持隐式类型转换通常是个糟糕的主意。 这条规则有其例外&#xff0c;最常见的例外是在建立数值类型时。 例&#xff0c;假设你设计一个class用来表现有理数&#xff0c;则允许整数“隐式转换”为有理数就很合理。 class Rational{ public:Rational(int numerator0,i…...