Using https://github.com/MacKentoch/react-native-beacons-manager
在iOS上工作很可爱, 但是, 在Android上, 在我开始测距信标后, 信标阵列显示什么都没有 (我旁边有 6 信标,它们都显示在 iOS 上(.
这是我正在做的事情:
componentDidMount() {
// Start detecting all iBeacons in the nearby
Beacons.detectIBeacons();
Beacons.startRangingBeaconsInRegion('Estimotes', 'B9407F30-F5F8-466E-AFF9-25556B57FE6D').then((data)=>{
console.log(data);
}).catch((reason) => {
console.log(reason);
});
// Print a log of the detected iBeacons (1 per second)
DeviceEventEmitter.addListener('beaconsDidRange', (data) => {
console.log(data);
});
}
在我的控制台中,我得到这个:
{beacons: Array(0), uuid: "b9407f30-f5f8-466e-aff9-25556b57fe6d", identifier: "Estimotes"}
我将估算的 UUID 保留为默认值,因此这应该有效。使用三星Galaxy S8 +进行测试。我在这里做错了什么编码吗?我是否缺少安卓上的其他权限?蓝牙和定位服务已打开。
好吧,我想通了。较新版本的安卓需要额外的权限。在你的清单中,把这个家伙扔进去:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
....如果您使用的是 react-native-kontaktio(它比 react-native-beacons-manager imo 更好(,您还需要将其放入<application>
部分的清单中:
<service android:name="com.kontakt.sdk.android.ble.service.ProximityService"/>
然后在您的应用中.js您需要请求权限,例如 (( 确保您
import PermissionsAndroid
from 'react-native'
:
componentDidMount() {
try {
const granted = PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'Location Permission',
'message': 'Activeev needs to access your location.'
}
)
console.log('here', granted);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("Location Permitted")
} else {
console.log("Location permission denied")
}
} catch (err) {
console.warn(err)
}
}
现在像魅力一样工作。希望这对其他人有所帮助。
谢谢你的回答。它绝对奏效了。根据您的回答,以下是我的实现。
import React, { Component } from 'react';
import { View, DeviceEventEmitter, ListView , Text} from 'react-native';
import Beacons from 'react-native-beacons-manager';
import {PermissionsAndroid} from 'react-native'
export default class App extends Component {
async componentDidMount() {
try {
const granted = await PermissionsAndroid.request(
PermissionsAndroid.PERMISSIONS.ACCESS_FINE_LOCATION,
{
'title': 'Location Permission',
'message': 'Activeev needs to access your location.'
}
)
console.log('here', granted);
if (granted === PermissionsAndroid.RESULTS.GRANTED) {
console.log("Location Permitted")
// Start detecting all iBeacons in the nearby
Beacons.detectIBeacons();
Beacons.startRangingBeaconsInRegion('test', '85d37dd8-a9dc-48a8-ab1c-b86fcb7a6a17').then((data)=>{
console.log(data);
})
.catch((reason) => {
console.log(reason);
});
// Print a log of the detected iBeacons (1 per second)
DeviceEventEmitter.addListener('beaconsDidRange', (data) => {
console.log(data);
});
} else {
console.log("Location permission denied")
}
}catch (err) {
console.warn(err)
}
}
render(){
return(
<View></View>
);
}
}