首先蓝牙设备有很多种,需要区分蓝牙设备的类型,市面上主要的蓝牙设置有

蓝牙鼠标,键盘,游戏手柄等

蓝牙耳机 蓝牙音箱 

可穿戴的蓝牙手环手表

蓝牙健康设备,电子秤等

因此技术上大体分为经典蓝牙和低功耗(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 第一个问题的答案就包含在该类的方法中