массив 'beacons' в cordova-plugins-ibeacon всегда пуст - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь заставить этот плагин работать.

https://github.com/petermetz/cordova-plugin-ibeacon

Я использую Cordova cli v8.

Я использую Jaalee iBeacon: https://www.jaalee.com/store

iB004-N plus

Я могу получить доступ к этому маяку с помощью приложения производителя (eBeacon для iOS) и получить его звуковой сигнал. У меня есть UUID, старшие и младшие номера.

Когда я запускаю плагин здесь, он работает без каких-либо ошибок, но массив маяков всегда пуст, даже если маяк сидит на моем столе рядом с моим телефоном Android 7.

Bluetooth включен, iBeacon подал звуковой сигнал сегодня, местоположение включено, и у приложения есть разрешение на использование местоположения.

Редактировать: я пробовал это на iOS, и это работает, но не на Android.

Вот мой код:

app.js

var identifier = 'jaalee';
var uuid = 'ebefd083-70a2-47c8-9837-e7b5634df524';
var minor = 1;
var major = 1;
var beaconRegion = null;

var app = {
    // Application Constructor
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);

        document.getElementById("start").addEventListener("click", start);
        document.getElementById("stop").addEventListener("click", stop);
    },

    // deviceready Event Handler
    //
    // Bind any cordova events here. Common events are:
    // 'pause', 'resume', etc.
    onDeviceReady: function() {
        this.receivedEvent('deviceready');
    },

    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
        beaconRegion = new cordova.plugins.locationManager.BeaconRegion(identifier, uuid, major, minor);
        console.log(' beaconRegion ', beaconRegion);
    }
};

app.initialize();

function logToDom(message) {
    var e = document.createElement('label');
    e.innerText = message;

    var br = document.createElement('br');
    var br2 = document.createElement('br');
    document.body.appendChild(e);
    document.body.appendChild(br);
    document.body.appendChild(br2);

    window.scrollTo(0, window.document.height);
}

function start() {

    console.log(' start ');

    var delegate = new cordova.plugins.locationManager.Delegate();

    delegate.didDetermineStateForRegion = function (pluginResult) {
        console.log('didDetermineStateForRegion: ', pluginResult);
        logToDom('[DOM] didDetermineStateForRegion: ' + JSON.stringify(pluginResult));

        cordova.plugins.locationManager.appendToDeviceLog('[DOM] didDetermineStateForRegion: '
            + JSON.stringify(pluginResult));
    };

    delegate.didStartMonitoringForRegion = function (pluginResult) {
        console.log('didStartMonitoringForRegion:', pluginResult);

        logToDom('didStartMonitoringForRegion:' + JSON.stringify(pluginResult));
    };

    delegate.didRangeBeaconsInRegion = function (pluginResult) {
        console.log('didRangeBeaconsInRegion: ', pluginResult);
        logToDom('[DOM] didRangeBeaconsInRegion: ' + JSON.stringify(pluginResult));
    };

    cordova.plugins.locationManager.setDelegate(delegate);

    // required in iOS 8+
    cordova.plugins.locationManager.requestWhenInUseAuthorization();
    // or cordova.plugins.locationManager.requestAlwaysAuthorization()

    console.log(' beaconRegion ', beaconRegion);

    cordova.plugins.locationManager.startRangingBeaconsInRegion(beaconRegion)
        .fail(function(e) { console.log(e); })
        .done();

}

function stop() {

    console.log(' stop ');

    cordova.plugins.locationManager.stopRangingBeaconsInRegion(beaconRegion)
        .fail(function(e) { console.log(e); })
        .done();

}

index.html

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css">
        <title>Hello World</title>
    </head>
    <body>
        <div class="app">
            <h1>Apache Cordova</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
            </div>
            <button id="start">start</button>
            <button id="stop">stop</button>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
</html>
...