2017-11-17 4 views
1

Mit https://github.com/MacKentoch/react-native-beacons-managerreagieren-native-Baken-Manager zeigt keine zweiten Baken auf Android

Works schöne auf iOS, aber auf Android, nachdem ich angefangen Baken beginnen, zeigt die Bake Array in es mit nichts (es gibt 6 Beacons neben mir und sie alle erscheinen auf iOS).

Hier ist, was ich tue:

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

}); 

} 

In meiner Konsole, bekomme ich diese:

{beacons: Array(0), uuid: "b9407f30-f5f8-466e-aff9-25556b57fe6d", identifier: "Estimotes"} 

ich die UUID des Estimotes als Standard links, so sollte diese Arbeit. Verwenden eines Samsung Galaxy S8 + zum Testen. Tue ich hier irgendwas falsches Codieren? Gibt es zusätzliche Berechtigungen für Android, die ich vermisse? Bluetooth- und Ortungsdienste sind aktiviert.

Antwort

0

In Ordnung, ich habe es herausgefunden. Neuere Versionen von Android erfordern zusätzliche Berechtigungen. In Ihrem Manifest, werfen diesen Kerl da drin:

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

.... wenn Sie verwenden reagieren-native-kontaktio (was besser ist als reagieren-native-Baken-Manager imo) werden Sie auch brauchen dies in Ihrem Manifest im <application> Abschnitt zu werfen:

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

Dann in Ihrem app.js Sie werden die Erlaubnis wie() stellen Sie sicher,

import PermissionsAndroid 
from 'react-native' 

beantragen müssen:

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

Arbeiten wie ein Charme jetzt. Hoffe das hilft jemand anderem.