首先蓝牙设备有很多种,需要区分蓝牙设备的类型,市面上主要的蓝牙设置有
蓝牙鼠标,键盘,游戏手柄等
蓝牙耳机 蓝牙音箱
可穿戴的蓝牙手环手表
蓝牙健康设备,电子秤等
因此技术上大体分为经典蓝牙和低功耗(Bluetooth Low Energy)蓝牙,低功耗蓝牙是在Android4.0以后才支持的,所以使用低功耗蓝牙时还得注意判断SDK的版本,另外现在市面上有的蓝牙设备是比较先进的(例如荣耀V8的手机)可以支持经典蓝牙和低功耗蓝牙(网上说之为单模模式和双模模式);
低功耗的蓝牙设备的相关开发完全和传统蓝牙不一样,内部都是通过一系列的回调进行操作,而公司要求适配的蓝牙游戏手柄应该属于传统蓝牙设备,准确来说是可输入设备(HID),毕竟传统的蓝牙也还可以继续再细分,综上,这里主要是谈谈适配蓝牙游戏手柄中用到的一些基本知识!
接口BluetoothProfile,蓝牙设备的配置文件
Profile的详细介绍可参考:
HidProfile 可输入设备的配置文件,实现了接口BluetoothProfile
HID设备(Hunman Interface Device Profile),即人机交互设备,常见的有鼠标,键盘,游戏手柄,蓝牙hid应该从android4.2开始支持的
OppProfile可传输文件蓝牙设备的配置文件,实现了接口BluetoothProfile
A2dpProfile第二代高质量音频设备的配置文件,实现了接口BluetoothProfile
HeadsetProfile蓝牙耳机类设备的配置文件,实现了接口BluetoothProfile
============用户操作蓝牙设备可能会遇到的问题===============================
扫描不到设备的可能原因有:
未将蓝牙设备设置为可见
与蓝牙设备的距离大于10米
蓝牙设备是否已经充满电
蓝牙设备的配套设备是否已经准备就绪
选择扫描设备的API不对
连接不到设备的可能原因有:
蓝牙设备已经配对了,未将设备取消配对
选择连接蓝牙设备的API不对
=============Android系统源码里蓝牙相关的模块代码(以公司的版本为例)=====================
一、版本里的蓝牙模块
路径:HiSTBAndroidV600R002C00SPC031\frameworks\base\core\java\android\bluetooth
类:BluetoothAdapter 访问蓝牙模块的入口,可开启和关闭蓝牙模块
类:BluetoothDevice 蓝牙设备的基本信息,包括设备名称,Mac地址等
类:BluetoothClass 蓝牙设备的详细信息,就是通过该类区分的各种蓝牙设备(手机,音箱可输入设备,健康设备等)
类:BluetoothInputDevice可输入的蓝牙设备
类:BluetoothProfile蓝牙设备的代理类,当然其中细分有多种蓝牙设备,对于不同种类的设备定义有相应的值
二、蓝牙APK
路径:HiSTBAndroidV600R002C00SPC031\packages\apps\Bluetooth
包:com.android.bluetooth
文件夹
a2dp
Map
Opp:下面的文件还比较多,都是蓝牙中文件传输需要用到的
活动:BluetoothOppLauncherActivity在蓝牙的文件传输中需要启动的界面
Pan
Hid
类:HidService 可输入设备的蓝牙代理中连接的就是该服务
三、设置APK
路径:HiSTBAndroidV600R002C00SPC031\packages\apps\Settings
包:com.android.settings.bluetooth设置中和蓝牙相关的都在这个包中
活动:DevicePickerActivity选择设备时需要启动的界面
碎片:DevicePickerFragment包含在上面的活动中
类:HidProfile可输入蓝牙设备的代理类
类:CachedBluetoothDevice 设置中描述蓝牙设备的类,在BluetoothDevice基础上封装的
类:BluetoothDevicePreference 第一个问题的答案就包含在该类的方法中