一直以来就有一种想法,就是自己写一个APP将安卓手机模拟成鼠标/键盘,应急的时候可以用来代替鼠标/键盘。之前也在国内外的网站上找了各种方案,但是这些方案不是很好,直到谷歌发布的API28后终于有了很好的解决方案。为了实现这个想法也走了不少弯路,也许方法不对吧,但看到最终完美运行的APP,心中还是很有成就感的。经测试装了此APP的手机能与几乎所有安卓手机、WIN10笔记本电脑连接并操作,苹果设备需要IOS13及以上版本才能支持蓝牙鼠标/键盘。苹果系统下鼠标功能正常,键盘输入文字没问题,但是其它功能键(如:Win,Menu,PageUp/Down,上下左右键…)则没什么作用。

BluetoothHidDevice

android.bluetooth.BluetoothHidDevice是完成任务的核心类。通过它将我们的应用注册成具有HID特征的蓝牙设备,并传送HID设备的报告描述符。如果我们的报告描述符没有问题,那么我们的设备就会成功模拟想要的HID设备。

码砖思路

首先将我们的应用注册为HID设备;

BluetoothAdapter.getDefaultAdapter().getProfileProxy(context, mProfileServiceListener,BluetoothProfile.HID_DEVICE);

public static BluetoothProfile.ServiceListener mProfileServiceListener = new BluetoothProfile.ServiceListener() {

@Override

public void onServiceDisconnected(int profile) { }

@SuppressLint("NewApi") @Override

public void onServiceConnected(int profile, BluetoothProfile proxy) {

bluetoothProfile = proxy;

if (profile == BluetoothProfile.HID_DEVICE) {

HidDevice = (BluetoothHidDevice) proxy;

HidConsts.HidDevice = HidDevice;

BluetoothHidDeviceAppSdpSettings sdp = new BluetoothHidDeviceAppSdpSettings(HidConsts.NAME, HidConsts.DESCRIPTION, HidConsts.PROVIDER,BluetoothHidDevice.SUBCLASS1_COMBO, HidConsts.Descriptor);

HidDevice.registerApp(sdp, null, null, Executors.newCachedThreadPool(), mCallback);

}

}

};

public static final BluetoothHidDevice.Callback mCallback = new BluetoothHidDevice.Callback() {

@Override

public void onAppStatusChanged(BluetoothDevice pluggedDevice, boolean registered) { }

@Override

public void onConnectionStateChanged(BluetoothDevice device, int state) {

if(state == BluetoothProfile.STATE_DISCONNECTED){

HidUitls.IsConnected(false);

if(connectionStateChangeListener != null){

connectionStateChangeListener.onDisConnected();

}

}else if(state == BluetoothProfile.STATE_CONNECTED){

HidUitls.IsConnected(true);

if(connectionStateChangeListener != null){

connectionStateChangeListener.onConnected();

}

}else if(state == BluetoothProfile.STATE_CONNECTING){

if(connectionStateChangeListener != null){

connectionStateChangeListener.onConnecting();

}

}

}

};

然后判断想要连接的蓝牙设备有没有配对过(双方都要配对好),如果没有配对则需要建立配对;

public static boolean Pair(String deviceAddress){

if(BluetoothAdapter.checkBluetoothAddress(deviceAddress)){

try {

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if(BtDevice == null){

BtDevice = mBluetoothAdapter.getRemoteDevice(deviceAddress);

}

if(BtDevice.getBondState() == BluetoothDevice.BOND_NONE){

BtDevice.createBond();

return false;

}else if(BtDevice.getBondState() == BluetoothDevice.BOND_BONDED){

return true;

}else if(BtDevice.getBondState() == BluetoothDevice.BOND_BONDING){

return false;

}

}catch (Exception ex){ ex.printStackTrace(); }

}

return false;

}

配对完成后获取蓝牙设备的MAC地址,用MAC地址连接目标设备;

public static boolean Connect(String deviceAddress){

if(TextUtils.isEmpty(deviceAddress)){return false;}

mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

if(BtDevice == null){

BtDevice = mBluetoothAdapter.getRemoteDevice(deviceAddress);

}

boolean ret = HidDevice.connect(BtDevice);

return ret;

}

IOS13相关设置

安装了HidDroid后的安卓机要控制苹果手机需要做如下设置,在苹果手机上找到:设置->辅助功能->触控->辅助触控->设备,选择已经配对并连接的安卓手机,设置成功后屏幕上出现一个白色的球,这个球就是鼠标指针。

代码运行效果

让你的安卓手机变成键盘鼠标

下面一篇博客谈谈如何通过蓝牙将安卓手机模拟成游戏方向盘:通过蓝牙将安卓手机模拟成游戏方向盘-支持旋转轮胎

完整源码下载地址

链接:https://pan.baidu.com/s/1U2E5mRzc876I76ftvwgrww

提取码:bowc

android hid 鼠标,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘相关推荐

  1. 蓝牙键盘 android手机游戏,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘...

    一直以来就有一种想法,就是自己写一个APP将安卓手机模拟成鼠标/键盘,应急的时候可以用来代替鼠标/键盘.之前也在国内外的网站上找了各种方案,但是这些方案不是很好,直到谷歌发布的API28后终于有了很好 ...

  2. android变身蓝牙键鼠,使用BluetoothHidDevice将安卓手机同时模拟成鼠标和键盘

    一直以来就有一种想法,就是自己写一个APP将安卓手机模拟成鼠标/键盘,应急的时候可以用来代替鼠标/键盘.之前也在国内外的网站上找了各种方案,但是这些方案不是很好,直到谷歌发布的API28后终于有了很好 ...

  3. 仅通过蓝牙HID将安卓手机模拟成鼠标和键盘

    相关文章:<蓝牙HID TouchScreen协议让你的安卓手机变成触摸屏> 本文源码下载地址:<仅通过蓝牙HID将安卓手机模拟成鼠标和键盘>源码 多文源码打包下载: < ...

  4. android 4.0.4 usb调试,安卓手机4.0怎么打开usb调试?图文详解附视频

    安卓手机更新换代的太快,系统每次升级多少会有点不同 总会有那么点不适应,就连如何调试USB都不知道怎么设置了? 下面就来就讲讲目前主流品牌手机4.0手机USB调试. 大部分Android设备打开&qu ...

  5. android 获取当前输入法,关于获取安卓手机系统输入法和设置输入法

    关于获取安卓手机系统输入法和设置输入法 获取输入法列表 adb shell ime list -s 出来下面的 io.appium.android.ime/.UnicodeIME com.sec.an ...

  6. android谷歌dns设置在哪,安卓手机怎么设置DNS Android手机修改DNS图文教程

    对于PC电脑设置DNS怎么设置笔者相信大家应该有一点定的能力,但是对于运行Android系统的智能手机想必大家都缺乏了解.那么安卓手机怎么设置DNS地址呢?下面百事网小编针对运行Android系统的安 ...

  7. android 4.4 锁屏密码,安卓手机忘记锁屏密码怎么办?安卓手机绕过锁屏密码的几种解决方法...

    在2003年有一部冯小刚执导的电影叫作<手机>相信不少人都看过,那句做人要厚道的经典台词流传至今.电影讲述的是男主角手机中隐藏着的秘密被妻子发现而引发的一系列故事,从此手机又有了一个外号叫 ...

  8. Android Studio使用真机(连接安卓手机驱动)调试教程

    一.前言 当我们的电脑的运存较小时,在进行Android Studio的AVD进行模拟调试时,电脑可能会出现卡顿,运行时间较长.此时,我们可以利用自己的安卓手机(苹果手机不支持)充当模拟器,将写好的a ...

  9. android 系统时间改变颜色吗,安卓手机通知栏时间、日期、通知颜色修改教程

    智能手机使用久了,难免产生视觉疲劳,很多朋友通过不断更新桌面或者刷机来达到不同的视觉效果,不过以上方法通常比较复杂,并且使用次数多了也容易失去新鲜感,下面本文也是涉及到手机界面美化方面,主要介绍下An ...

最新文章

  1. 2014北京三险一金缴存比例
  2. jMeter 打开项目时遇到错误消息 CannotResolveClassException: com.blazemeter.jmeter.RandomCSVDataSetConfig
  3. 冰冰讲数学鸿蒙团队4年级,冰冰也曾是水肿星人?3分钟急救方案教你甩掉晨间浮肿脸!...
  4. 深度优先搜索——八皇后问题(洛谷 P1219)
  5. python3 有序字典
  6. Codeforces Round #452 (Div. 2)
  7. atomic与nonatomic的区别
  8. VALSE学习(六):机器学习中的标记分布与标记增强
  9. ASP.NET MVC上传限制
  10. [bzoj 4066]简单题
  11. 量化因子投资的至暗时刻,2018远比你想象得要惨烈
  12. 微信小程序插件安装Vant有赞组件库
  13. VSCode中使用GitHub
  14. 不到两年的前端小白2017个人年终总结:今年的年终总结是为了更好的自己
  15. BP神经网络的非线性曲线拟合和预测(未完)
  16. 谈谈小弟最近暗自干些什么勾当(LGame WP版开发进度汇报)
  17. Centos7 配置163邮箱
  18. MAXHUB开启系统恢复
  19. Site Template
  20. 利用人工智能的模式辨识能力 由AI掌控的超音速飞机

热门文章

  1. libvirt Java 实现远程管理虚拟机
  2. 预设性能控制-Prescribed Performance Control(PPC)
  3. Django练习——基于Mysql的登录注册功能界面(django模型、模板、表单简单应用)
  4. EXE转JPG后缀格式工具(真实JPG后缀)
  5. 安防视频监控系统方案 现代机场安防视频监控系统
  6. 容器CICD实践:基于Helm实现应用交付自动回滚
  7. 在vc2008中用_crtBreakAlloc调试内存泄漏
  8. 小明左、右手中分别拿两张纸牌(比如:黑桃10和红桃8,数字10和8可通过键盘录入),要求编写代码交换小明手中的牌
  9. 中望CAD的lisp编辑器_中望CAD 2020中文版
  10. WGestures全局鼠标手势设置指南