反应原生信标管理器 在安卓上不显示任何信标.



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>
   );
 }
}

相关内容

  • 没有找到相关文章