一、官方简介:
- 对于在Android设备间执行比较耗电的操作,传统蓝牙(Classic Bluetooth)是一种正确的选择;
- 所有关于 Bluetooth的API都在android.bluetooth包下;
二、API学习:
BluetoothAdapter
这个类代表蓝牙适配器,并且是所有蓝牙交互的入口点,通过这个类,我们可以发现其他的蓝牙设备,查询已经配对的设备;
实例化一个BluetoothDevice,BluetoothDevice使用一个已知的MAC地址,并创建一个BluetoothServerSocket监听来自其他设备的通讯。BluetoothDevice
代表一个蓝牙设备,通它可以通过BluetoothSocket向其他的蓝牙设备发出连接请求;
通过它还可以设备的信息包括:设备名称、设备地址、类型、配对状态。BluetoothSocket
代表一个蓝牙套接字接口(类似于一个TCP套接字);
它是一个连接点,允许应用程序与另一个蓝牙设备交换数据通过InputStream OutputStream。BluetoothServerSocket
是一个开放的服务器套接字,侦听传入请求(类似于一个TCP ServerSocket);
为了连接两个Android设备,设备必须用这个类打开一个服务器套接字;
当一个远程蓝牙设备请求连接到这个设备,如果请求的连接被接受,那么BluetoothServerSocket将返回一个已经连接的BluetoothSocket对象。BluetoothClass
描述了一个蓝牙设备的一般特征和功能;
这是一套只读属性,定义设备的主要和次要设备级别和它的服务;
然而,这并不可靠地描述所有蓝牙配置文件和服务支持的设备,但是提示设备类型还是有用的。BluetoothProfile
代表蓝牙规范的一个接口;
BluetoothProfile是一套无线接口规范对于设备之间基本的蓝牙通信;BluetoothHeadset
为手机使用蓝牙耳机提供支持;
它包括了蓝牙耳机和免提(v1.5)规范。BluetoothA2dp
定义如何通过蓝牙连接将高质量的音频流从一个设备到另一个;
“A2DP(Advanced Audio Distribution Profile)”代表先进的蓝牙音频传输模型协定。BluetoothHealth
代表一个可以控制蓝牙设备的健康设备规范代理。BluetoothHealthCallback
一个抽象类,我们可以实现其抽象方法去接收应用程序内部注册状态和蓝牙通道状态的更新变化。BluetoothHealthAppConfiguration
代表了第三方健康应用设备去和其他的健康设备通信的配置。BluetoothProfile.ServiceListener
一个接口,通知BluetoothProfile IPC客户当他们连接或断开服务(即内部服务运行一个特定的配置文件)。
三、权限
AndroidManifest.xml:
注意:如果使用了BLUETOOTH_ADMIN权限,那么必须使用BLUETOOTH权限;
<manifest ... >
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
</manifest>
四、蓝牙设置
设备是否支持蓝牙
- 在您的应用程序可以通过蓝牙通信之前,你需要确认蓝牙设备上的支持,如果是这样,确保它是启用的;
- 如果不支持蓝牙,那么你应该优雅地禁用任何蓝牙功能。如果蓝牙支持,但禁用,那么你可以要求用户启用蓝牙不离开您的应用程序;
- 这个设置在两个步骤完成,使用BluetoothAdapter。
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
}
如果BluetoothAdapter.getDefaultAdapter()==null,那么说明这个设备不支持蓝牙。
蓝牙重命名
mBluetoothAdapter.setName(name);//本地蓝牙重命名
mBluetoothAdapter.getName();//获取本机蓝牙名
通过监听BluetoothAdpater.ACTION_LOCAL_NAME_CHANGED监听本机蓝牙名称的改变
如果设备支持蓝牙,那么启用蓝牙
//如果蓝牙被关闭
if (!mBluetoothAdapter.isEnabled()) {
//那么打开蓝牙
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
}
查询已经配对过的设备
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
// If there are paired devices
if (pairedDevices.size() > 0) {
// Loop through paired devices
for (BluetoothDevice device : pairedDevices) {
// Add the name and address to an array adapter to show in a ListView
Log.d(TAG, "onClick:已配对设备 "