基本逻辑
基本步骤:打开蓝牙、搜索附近设备、配对设备、连接设备、传输数据
- 打开蓝牙、搜索附近设备、配对设备、连接设备:主要借助Android提供的相关API来实现
- 传输数据:是基于Socket的,类似于TCP协议传输数据,不过用的并不是普通Java类中的Socket,而是蓝牙专用的BluetoothServerSocket和BluetoothSocket,类的模型和TCP协议中的ServerSocket和Socket类似。
相关权限
//不需要动态申请
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> //与蓝牙相关的
//后面的都需要动态申请
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> //上面两个不申请的话会搜索不到周围设备
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> //最后两个用于传输文件
实现方式
蓝牙几乎所有操作都要用到BluetoothAdapter这个类,获取方法:
private BluetoothAdapter bluetoothAdapter;//蓝牙适配器
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
1. 打开 / 关闭蓝牙
1.1 不带提示的 打开/关闭 方式
bluetoothAdapter.enable(); //打开蓝牙
bluetoothAdapter.disable(); //关闭蓝牙
1.2 带提示的打开方式
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(intent, REQUEST_ENABLE_BLUETOOTH);
带提示的打开方式需要使用onActivityResult( )方法来接收返回结果
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ENABLE_BLUETOOTH) {
if (resultCode == RESULT_OK) {
showMsg("蓝牙打开成功");
} else {
showMsg("蓝牙打开失败");
}
}
}