蓝牙开发遇到几个问题

1.有些手机无法搜索的设备名
public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
//有些手机扫描不到设备名称,只有在scanRecord里才有这些名字信息  test假定是我们关键字,然后我们名称是固定长度就可以截取出来了
String tmpName=new String(scanRecord);
LOG.i(TAG, "scanRecord 里的值:"+tmpName );
if(tmpName.contains("test")){
try {
String deviceName=tmpName.substring(tmpName.indexOf("test"),tmpName.indexOf("test")+13);
}catch (Exception e){
e.printStackTrace();
}
}
}


2. 6.0以上的蓝牙手机需要开启定位可以搜索到设备
权限ACCESS_COARSE_LOCATION


3.手机蓝牙在打开的时候可能是在自己搜索蓝牙设备,导致我们第一次去搜索蓝牙设备都搜不到,这个我时候我采用
首先如果蓝牙没打开,就先打开蓝牙
延迟两秒再执行
mBluetoothAdapter.stopLeScan(callback);

mBluetoothAdapter.startLeScan(callback);


4. vivo  X20A还必须得有

android.permission.BLUETOOTH_PRIVILEGED  

5.0以上系统静默开启蓝牙需要这个操作,不然会出现E/BluetoothAdapter: startLeScan: cannot get BluetoothLeScanner


5.华为荣耀3c 手机 蓝牙连接  出现过一次   搜索不到蓝牙设备,厂商提供搜索工具也搜索不到,其他手机打开蓝牙可以搜索到该设备,打开蓝牙开发检测后就可以了,再关闭蓝牙检测也可以,再也无法复现了



6.打开蓝牙三种方式

隐形打开(在5.0以上需要支持android.permission.BLUETOOTH_PRIVILEGED  有些手机比如Vivo拒绝后可能一直打开不了)

而且大部分手机如果隐式打开,还是会提示,所以还不如干脆直接显式打开,兼容性会更好

BluetoothManager mBluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothAdapter mBluetoothAdapter = mBluetoothManager.getAdapter();
mBluetoothAdapter.enable();

显性打开(最好是在UI里有做提示用户来打开,这样对用户和兼容性比较好,太多自定义系统在权限那块兼容不太好)

//会弹出系统对话框,提示用户是否允许蓝牙设备对其他设备的可见性
Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 120);//可被发现的持续时间
startActivity(intent);

//会弹出一个对话框,提示用户是否允许打开蓝牙
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enableBtIntent);

//打开系统蓝牙界面
Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
startActivity(intent);
阅读更多
个人分类: android小知识补充
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭