Android Ble蓝牙开发

1.权限设置

    <uses-feature android:name="android.hardware.location.gps" />
    <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" />

这里有人可能疑惑,使用蓝牙为啥要定位权限,其实蓝牙技术是可以实现定位的,要使用蓝牙必须要申请定位权限,android 9 之后动态权限申请

private void checkPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            int fine_location = checkSelfPermission(android.Manifest.permission.ACCESS_FINE_LOCATION);
            int cross_location = checkSelfPermission(android.Manifest.permission.ACCESS_COARSE_LOCATION);
            if (fine_location != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 1);
            } else {
                finish();
                return;
            }
            if (cross_location != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_COARSE_LOCATION}, 1);
            } else {
                finish();
                return;
            }
        }
    }

动态申请,提示的是申请定位权限,这点个不要奇怪。

2.获取蓝牙设备管理器

private void getBleAdapter() {
        if (mAdapter != null) {
            return;
        }
        BluetoothManager bluetoothManager =
                (BluetoothManager) context.getSystemService (Context.BLUETOOTH_SERVICE);
        mAdapter = bluetoothManager.getAdapter ();
    }

这里获取到的是一个蓝牙适配器BluetoothAdapter ,后续通过适配器调用蓝牙适配器。

3.设备搜索

mAdapter.startLeScan (leScanCallback);
BluetoothAdapter.LeScanCallback leScanCallback = new BluetoothAdapter.LeScanCallback () {
        @Override
        public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
         //device.getName()  设备名称
         //device.getAddress()  mac地址
        }
    };

这个搜索方法在21 已经过期了后续使用

 mAdapter.getBluetoothLeScanner ().startScan (new ScanCallback () {
                    @Override
                    public void onScanResult(int callbackType, ScanResult result) {
                        super.onScanResult (callbackType, result);
                     //    BluetoothDevice device= result.getDevice ();  获取设备对象
                     //   result.getRssi ()  信号强度,根据这个可以计算出距离服务端蓝牙的距离
                    }
                });

3.1 停止搜索

mAdapter.stopLeScan (leScanCallback);

同样这个方法21后过期了,可以使用新的api

mAdapter.getBluetoothLeScanner ().stopScan(// 搜索接口实例);

在搜到合适设备或者想停止设备搜索时可以调用这个api停止搜索。

  • 注意:如果去连接设备时,同时还在搜索设备,建议先调用stopScan 停止搜索,然后再连接,这样可以提高效率。

4.设备连接

一般情况下,根据业务不同有可能我们会将搜索到的BluetoothDevice 保存下来。
再次使用时可以用

BluetoothDevice device = mAdapter.getRemoteDevice (deviceInfo.getAddress ());

如果device 是空的,说明设备可能已经关闭了,后边就没必要链接了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值