RN蓝牙扫描设备连接问题

38 阅读1分钟
import React, { useRef, useEffect } from 'react';
import { View, Text, StyleSheet, Animated, PermissionsAndroid, Platform } from 'react-native';
import { TouchableOpacity } from 'react-native-gesture-handler';
import { BleManager } from 'react-native-ble-plx';
const manager = new BleManager();
export const test = () => {
  const scanXinHao =async () => {
    let permissions;
    if (Platform.Version >= 31) { // Android 12 及以上
      permissions = [
        'android.permission.BLUETOOTH_SCAN',
        'android.permission.BLUETOOTH_CONNECT',
        'android.permission.BLUETOOTH_ADVERTISE'
      ];
    } else { // Android 12 以下
      permissions = ['android.permission.ACCESS_FINE_LOCATION'];
    }
    for (const permission of permissions) {
      const check = await PermissionsAndroid.check(permission);
      console.log(`permission ${permission} check ${check}`);
      if (!check) {
        await PermissionsAndroid.request(permission);
      }
    }
    // 开始扫描
    manager.startDeviceScan(null, null, async (error, device) => {
      if (error) {
        // 扫描出错,一般是权限问题
        console.error(error);
        // 停止扫描
        manager.stopDeviceScan()
        console.log('蓝牙扫描出错了~');
        return;
      }
      // 扫描到设备
      console.log(device)
      let a = JSON.stringify(device)
      console.log(a) // 扫描到的设备
      if (device.name === 'Take-73576717') {
        console.log('找到设备了,停止扫描,开始连接')
        manager.stopDeviceScan()
        // 连接设备,并获取是否连接成功,拿到连接成功后返回的信息
        manager.connectToDevice(device.id).then((device) => {
          console.log('连接成功返回的信息', JSON.stringify(device))
        })
      }
    });
  }

  return (
    <View style={styles.container}>
      <TouchableOpacity onPress={scanXinHao}>
        <Text>扫描信号</Text>
      </TouchableOpacity>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  }
});