react-native-ble-plx扫描在npm模块内移动时不运行

vsdwdz23  于 2023-05-29  发布在  React
关注(0)|答案(1)|浏览(93)

因为我将有多个应用程序使用相同的实现连接到一个BLE设备,我试图将该代码移动到一个模块内。然而,我遇到了一个奇怪的问题,即扫描代码不工作的模块内时,相同的代码工作时,在一个文件夹内的应用程序。
我已经用以下代码进行了测试:

import {
  BleError,
  BleManager,
  Device as BlxDevice,
  LogLevel,
} from 'react-native-ble-plx';
import { PermissionsAndroid } from 'react-native';

const manager = new BleManager();
manager.setLogLevel(LogLevel.Verbose);

export const tryScan = () => {
  console.log('In main app');
  PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
  );

  PermissionsAndroid.request(
    PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
  ),
    manager.startDeviceScan(
      null,
      { allowDuplicates: true },
      (error: BleError | null, scannedDevice: BlxDevice | null) => {
        console.log('Discovered device', scannedDevice);
        manager.stopDeviceScan();
      },
    );
};

当在模块内时,根本不会发现任何设备,当在应用程序内而不是作为模块时,它会按预期工作。
该模块将本机库作为对等依赖项:

"peerDependencies": {
    "react-native": "^0.64.x",
    "react-native-ble-plx": "^2.x"
  },

应用程序以这种方式包含模块

"dependencies": {
    "device-control": "file:../device-control",
  },

我已经验证了我在应用程序的node_modules中有正确的代码。
为了增加我的困惑,在使用react-native-ble-plx的应用程序中,可以使用manager.onStateChange监控BLE状态。
我在logcat中没有发现错误,在metro中也没有错误。有人能告诉我错误的原因吗?

hmae6n7t

hmae6n7t1#

我也面临着同样的问题。除非你不需要编译SDK,否则我确实从33下载了它到31。同时降级目标SDK。我还没有测试过不同的配置,但这个配置适用于我的原型项目。

buildToolsVersion = "29.0.3"

minSdkVersion = 23

compileSdkVersion = 31

targetSdkVersion = 30

我请求这些权限:

const _PERMISSIONS = [
  PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
  PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION,
  PermissionsAndroid.PERMISSIONS.BLUETOOTH_SCAN,
  PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT
];

if (Platform.OS != "android") return;
const granted = await PermissionsAndroid.requestMultiple(_PERMISSIONS);

AndroidManifest.xml

<!-- Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission in 
Android API 23+ -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

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

  <uses-feature android:name="android.hardware.bluetooth" android:required="true"/>
  <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />

相关问题