react-native-beacons-manager 未在 Android 上显示任何信标

Posted

技术标签:

【中文标题】react-native-beacons-manager 未在 Android 上显示任何信标【英文标题】:react-native-beacons-manager Not showing any beacons on Android 【发布时间】:2018-05-01 17:06:50 【问题描述】:

使用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"

我将 Estimotes 的 UUID 保留为默认值,所以这应该可以工作。使用三星 Galaxy S8+ 进行测试。我在这里做错了什么编码吗?我在 Android 上是否缺少其他权限?蓝牙和定位服务已打开。

【问题讨论】:

【参考方案1】:

好吧,我想通了。较新版本的 android 需要额外的权限。在你的清单中,把这个人扔进去:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

....如果您使用 react-native-kontaktio(比 react-native-beacons-manager imo 更好),您还需要在 &lt;application&gt; 部分的清单中添加它:

<service android:name="com.kontakt.sdk.android.ble.service.ProximityService"/>

然后在你的 app.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 PermissionsAndroid from 'react-native'【参考方案2】:

感谢您的回答。它确实奏效了。根据您的回答,以下是我的实现。

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


【讨论】:

以上是关于react-native-beacons-manager 未在 Android 上显示任何信标的主要内容,如果未能解决你的问题,请参考以下文章