因为我将有多个应用程序使用相同的实现连接到一个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中也没有错误。有人能告诉我错误的原因吗?
1条答案
按热度按时间hmae6n7t1#
我也面临着同样的问题。除非你不需要编译SDK,否则我确实从
33
下载了它到31
。同时降级目标SDK。我还没有测试过不同的配置,但这个配置适用于我的原型项目。我请求这些权限:
AndroidManifest.xml