前言
原来蓝牙现在还分经典蓝牙、低功耗蓝牙和双模蓝牙,技术的发展真的超过个人的认知速度,不学习意味退步。本来写着低功耗蓝牙和智能蓝牙音箱的交互,但写到最后,因为蓝牙音箱还没有做好,没办法给本文的结果做个保障,故最后改成蓝牙聊天。蓝牙聊天可能适合在搭飞机和高铁这种没有网络或者网络不好等特殊情况下使用。本文的Demo可以正常使用。
本文总体流程:发现蓝牙->配对蓝牙->连接蓝牙->数据交互
在这个流程,主要是一些细节和异常的处理,如何更好的体现用户体验。
声明权限
在项目的配置文件AndroidManifest.xml加入如下代码即可,让APP具有蓝牙访问权限和发现周边蓝牙权限。
//使用蓝牙需要该权限
<uses-permission android:name="android.permission.BLUETOOTH"/>
//使用扫描和设置需要权限
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
//Android 6.0以上声明一下两个权限之一即可。声明位置权限,不然扫描或者发现蓝牙功能用不了哦
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Android 6.0以上动态申请权限位置权限,否则默认是禁止的,无法获取到蓝牙列表。
/**
* Android 6.0 动态申请授权定位信息权限,否则扫描蓝牙列表为空
*/
private void requestPermissions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {
Toast.makeText(this, "使用蓝牙需要授权定位信息", Toast.LENGTH_LONG).show();
}
//请求权限