gpt4 book ai didi

javascript - react native 扫描蓝牙设备

转载 作者:行者123 更新时间:2023-11-30 06:19:06 53 4
gpt4 key购买 nike

对于我的项目,我正在尝试使用 react-native 应用程序扫描 HM-10 BLE。我正在使用这个例子 Scanning for Bluetooth devices with React Native .看起来我成功安装了这个库,因为当我运行代码时我没有得到任何错误。我执行了以下步骤。

  1. react-native init reactnativeBLE
  2. npm i --save react-native-ble-manager
  3. npm 安装
  4. react-native 链接 react-native-ble-manager
  5. react-native run-ios

但是,当我运行示例代码时,我没有找到任何设备。在我的 App.js 文件中,我复制了示例代码:

import React, { Component } from 'react';
import {
AppRegistry,
ListView,
NativeAppEventEmitter,
View,
Text,
Button } from 'react-native';
import BleManager from 'react-native-ble-manager';

// I changed this to export default App
class BluetoothScanner extends Component {
constructor(props){
super(props);

const dataSource = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.devices = [];
this.state = {
dataSource: dataSource.cloneWithRows(this.devices)
};
}

componentDidMount() {
console.log('bluetooth scanner mounted');

NativeAppEventEmitter.addListener('BleManagerDiscoverPeripheral',(data) =>
{
let device = 'device found: ' + data.name + '(' + data.id + ')';

if(this.devices.indexOf(device) == -1) {
this.devices.push(device);
}

let newState = this.state;
newState.dataSource = newState.dataSource.cloneWithRows(this.devices);
this.setState(newState);
});

BleManager.start({showAlert: false})
.then(() => {
// Success code
console.log('Module initialized');
});
}

startScanning() {
console.log('start scanning');
BleManager.scan([], 120);
}

render() {
return (
<View style={{padding: 50 }}>
<Text>Bluetooth scanner</Text>
<Button onPress={() => this.startScanning()} title="Start scanning"/>

<ListView
dataSource={this.state.dataSource}
renderRow={(rowData) => <Text>{rowData}</Text>}
/>
</View>
);
}
}

我的问题为什么点击开始扫描后无法扫描到BLE设备?我需要额外的设置吗?

如有任何意见或建议,我们将不胜感激!提前致谢:)

最佳答案

问题可能是由以下原因引起的:

  1. 许可
  2. SDK 版本

权限

(对于安卓)将这些行添加到您的 android list 文件中在路径下:

android/app/src/main/AndroidManifest.xml

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

当您第一次运行您的应用程序时,如果不尝试运行时许可,设备必须请求许可。如下图:

if (Platform.OS === 'android' && Platform.Version >= 23) {
PermissionsAndroid.check(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION).then((result) => {
if (result) {
console.log("Permission is OK");
} else {
PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION).then((result) => {
if (result) {
console.log("User accept");
} else {
console.log("User refuse");
}
});
}
});
}

注意事项

在 Android API 29 >= 你需要使用“ACCESS_FINE_LOCATION”而不是“ACCESS_COARSE_LOCATION”。


SDK 版本

在尝试了很多改变 sdk 版本的东西后对我来说效果很好。我将 sdk 版本 29 -> 28 降级,问题解决了!一切看起来都不错,但仍然无法尝试降级 sdk 版本。转到 build.gradle 文件

android/build.gradle

buildscript {
ext {
buildToolsVersion = "28.0.3"
minSdkVersion = 18
compileSdkVersion = 28
targetSdkVersion = 28
}

图书馆页面: https://github.com/innoveit/react-native-ble-manager

关于javascript - react native 扫描蓝牙设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54337995/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com