Android Studio开发的模拟蓝牙键盘
java version "1.8.0_371" Java(TM) SE Runtime Environment (build 1.8.0_371-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed mode)
Android Studio Iguana | 2023.2.1 Patch 2 Build #AI-232.10300.40.2321.11668458, built on April 4, 2024 Runtime version: 17.0.9+0--11185874 amd64
Android Debug Bridge version 1.0.41 Version 34.0.4-10411341
build apk
即可打包为APK安装包。导入项目时应当会自动sync所依赖的包。MyApplication\app\src\main\java\com\example\myapplication
Webview
技术构建前端,与后端交互,语言为java
;BluetoothHidDevice
库构建。详细问题可以参考CSDN博客Android模拟蓝牙蓝牙键盘——适配Android和Windows;MainActivity.java
主线程文件。包括webview页面的初始化,以及生命周期方法onCreate()
;callBluetooth.java
蓝牙功能文件。实现蓝牙HID服务的本机注册初始化,发起蓝牙连接,发送键盘键位信息,以及一系列回调。HidConfig.java
HID描述符文件。通过正确的描述符可以成功注册为HID键盘设备,并为所连接设备所识别。其中包括设备的名称、提供者、ID等等。目前的描述符有一定的兼容性问题,在Android和Windows平台上可以正常作用的描述符存在不同,仍在优化中。可以通过更换描述符来在不同平台使用,可能后期会完成切换描述符的功能。文件中也定义了很多描述符,JavaScriptInterfaces.java
一些提供给前端的JavaScript接口。主要的作用是实现键盘图片和键位信息的更换。KeyMap.java
定义每个键位在HID传输中对应的字节。Vibrators.java
实现设备马达震动。在按下键盘时震动优化手感,需要注意的是有的设备不支持线性马达震动。MyApplication\app\src\main\AndroidManifest.xml
权限声明文件
MyApplication\app\src\main\res\layout\activity_main.xml
UI声明文件
EMyApplication\app\src\main\res\drawable
一些着色文件
E:\MyApplication\app\src\main\res\layout
一些布局文件,主要实现Mac连接框的UI设置+扫描设备的底部弹窗布局
MyApplication\app\src\main\assets
下;index.html
为主页面,css,js,img,data,html
文件夹分别存放样式表、JavaScript脚本、图片素材、初始化键位数据、子页面;bluetooth.js,temp.js,test_touch.js
暂未使用;touchstart
和touchend
事件实现多点触控,同时实现了长按+组合键;使用 Readme_XXX.md
来支持不同的语言,例如 Readme_en.md // 暂无
, Readme_zh.md
开启APP时需要开启安卓设备+所连接设备蓝牙;
页面左上角滚动设置图片,点击可以展开菜单。点击更换键盘即可更换键盘(背景)图片,更换后需要导入对应格式的键盘文件;
导入图片(背景)支持的格式有:
.png,.jpeg,.bmp
;.svg(.xml)
;.gif,.webp,.heif
;移除导入键位功能。切换为自己绘画的透明键盘图片svg.svg
,键位采用全方形易于调控,且易于优化按下效果;
注意更换键盘图片+导入键位信息的功能未进行测试,建议不要使用;
点击右上角的太阳🌞可以切换亮色暗色;
点击左下角的按钮可以实现键位标记的生成+去除;
蓝牙连接:
左下角灰色框打印连接信息,可以上下滑动(至多50条);
出现HID服务连接不上或连接上无法发送报告,可以参考Android模拟蓝牙蓝牙键盘——适配Android和Windows。可能是驱动或HID描述符的问题;
如果出现闪退,很可能是你手机厂商封锁了HID API;
增加了按键调整。点击底部的调整按键,可以进入调整状态;此时长按字母键,可以进行按键字母更换,具体会弹出一个浮窗;点击目标键后页面svg元素也会同步刷新。点击设置中的恢复默认即可设置为原始键盘图+键位区域设置;
增加切换描述符功能。如果一个描述符不起作用,点击设置->更换描述符可以选择存储的描述符,上次的选择会标为蓝色。默认为描述符5。更换后需要再次init。安卓和Windows往往有不同的适配描述符,可能需要切换;
优化了Mac地址获取。可以发起蓝牙扫描,此时从页面底部升起弹窗(未美化)。点击所连接设备即可。注意已经配对会显示未蓝牙断开,即使其已经开启蓝牙。直接点击即可。点击后弹出弹窗二次确定;
示意图:
示意图:
由于适配工作的困难性和复杂度,手机小屏存在键位错位等适配问题。建议使用大于10.5英寸的平板测试。(注:错位指开启touchbar再进行关闭后有概率出现键盘错位的情况,不考虑touchbar或开启后不关闭仍可正常使用)
2024/2/24:
软件在 Android
上报错了…2024/2/28:
代码中包含很多的 Log.d(TAG,"String")
来输出日志信息以便于修改错误;此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。