关于Android蓝牙开发的一些心得---(扫描篇)

以下是个人在开发蓝牙的过程中遇到的一些问题的总结,也希望能够帮助到刚开发android 蓝牙的程序猿,能够让你们少踩一些坑。

1.在AndroidManifest.xml中声明如下权限:

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

2.动态申请定位权限:

由于android6.0及以上系统需动态申请敏感权限,部分机型需获取定位权限ACCESS_COARSE_LOCATION方可扫描到蓝牙设备。另开发过程中,还会遇到部分机型(如华为mate10)即便已获取定位权限,但仍扫描不到设备,后经排查发现如果手机的GSP定位开关如果未打开,也扫描不到设备。所以我们在蓝牙扫描之前还需要加一下如下判断:


public static final boolean isLocationEnable(Context context) {
    LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
    boolean isNetEnable = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    boolean isGpsEnable = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    if (isNetEnable || isGpsEnable ) { 

       return true;

    }
    return false;
}

以上方法用来判断定位开关是否打开。

如果未打开定位,可以通过如下方法去设置打开:

 Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
 startActivityForResult(intent, REQUEST_CODE);
 

3.启动和关闭蓝牙:

1.判断当前android设备是否支持蓝牙(比如当我们使用模拟器调试时,由于我们的模拟器不支持蓝牙功能,所以在使用蓝牙功能时,一定要记得多加一个判断,否则就很有可能导致app crash):

BluetoothAdapter blueAdapter = BluetoothAdapter.getDefaultAdapter(); // 获取蓝牙适配器
if( blueAdapter == bull ) { // 表示手机不支持蓝牙
    return;    // 后续不可进行蓝牙相关的操作
}

2.蓝牙扫描前常用操作:

blueAdapter .isEnabled()   表示当前蓝牙是否可用; blueAdapter.enable()  去打开蓝牙;blueAdapter.disable()关闭蓝牙适配器。

3.蓝牙扫描与停止扫描:


mLeScanCallback = new BluetoothAdapter.LeScanCallback() {
    @Override
    public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
        // device 是扫描到的蓝牙设备,可以通到device实例对象获取到其mac地址、name等
        // rssi 表示扫描到的蓝牙设备与此手机之间的瞬时信号强度
        // scanRecord 表示当前蓝牙设备所携带的广播包的信息,例如可以通过读取内部数据判断是否为本公            
        // 司的产品    
        
    }
};

blueAdapter.startLeScan(mLeScanCallback);  // 开始扫描

blueAdapter.stopLeScan(mLeScanCallback);  // 停止扫描

注意:当我们不需要扫描时,一定要记得停止扫描,避免造成不必要的内存消耗。

今天先写到这里,后续还会写一些关于蓝牙连接、通讯的文章,欢迎大家继续关注,以上如有不足之处,还请多多包涵~

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值