Мониторинг маяка не работает в nativescript vue - PullRequest
0 голосов
/ 13 июля 2020

Я использую этот плагин в Nativescript, чтобы использовать Beacon со следующим кодом:

import {Observable} from 'tns-core-modules/data/observable';
import {
    BeaconRegion, Beacon, BeaconCallback,
    BeaconLocationOptions, BeaconLocationOptionsIOSAuthType, BeaconLocationOptionsAndroidAuthType
} from 'nativescript-ibeacon/nativescript-ibeacon.common';
import {NativescriptIbeacon} from 'nativescript-ibeacon';
export default class BeaconAdapter extends Observable implements BeaconCallback{
  private nativescriptIbeacon: NativescriptIbeacon;

    public message: string = 'Init';

    private region: BeaconRegion = null;

    constructor(id: string, uuid: string) {
        super();
        let options: BeaconLocationOptions = {
          iOSAuthorisationType: BeaconLocationOptionsIOSAuthType.Always,
          androidAuthorisationType: BeaconLocationOptionsAndroidAuthType.Fine,
          androidAuthorisationDescription: 'Location permission needed'
        };
        this.nativescriptIbeacon = new NativescriptIbeacon(this, options);
        this.region = new BeaconRegion(id, uuid, 100, 1);
    }

    start() {
        this.message = 'start';
        if (!this.nativescriptIbeacon.isAuthorised()) {
            console.log('NOT Authorised');
            this.nativescriptIbeacon.requestAuthorization()
                .then(() => {
                    console.log('Authorised by the user');
                    this.nativescriptIbeacon.bind();

                }, (e) => {
                    console.log('Authorisation denied by the user');
                })
        } else {
            console.log('Already authorised');
            this.nativescriptIbeacon.bind();
        }

    }

    stop() {
        this.message = 'stop';
        this.nativescriptIbeacon.stopRanging(this.region);
        this.nativescriptIbeacon.stopMonitoring(this.region);
        this.nativescriptIbeacon.unbind();
    }

    onBeaconManagerReady(): void {
        console.log('onBeaconManagerReady');
        this.nativescriptIbeacon.startRanging(this.region);
        this.nativescriptIbeacon.startMonitoring(this.region);
    }

    didRangeBeaconsInRegion(region: BeaconRegion, beacons: Beacon[]): void {
        //console.log('didRangeBeaconsInRegion: ' + region.identifier + ' - ' + beacons.length);
        //this.message = 'didRangeBeaconsInRegion: ' + (new Date().toDateString());
        for (let beacon of beacons) {
            console.log('B: ' + beacon.proximityUUID + ' - ' + beacon.major + ' - ' + beacon.minor + ' - ' + beacon.distance_proximity + ' - ' + beacon.rssi + ' - ' + beacon.txPower_accuracy );
        }
    }

    didFailRangingBeaconsInRegion(region: BeaconRegion, errorCode: number, errorDescription: string): void {
        console.log('didFailRangingBeaconsInRegion: ' + region.identifier + ' - ' + errorCode + ' - ' + errorDescription);
    }

    didEnterRegion(region: BeaconRegion) {
        //console.log(region);
        console.log('Did enter Region ' + region.identifier);
    }

    didExitRegion(region: BeaconRegion) {
        //console.log(region);
        console.log('Did leave Region '  + region.identifier);
    }

}

Но когда он начинает мониторинг или ранжирование, не обнаруживает никаких устройств, даже когда я есть один излучающий рядом с устройством, на котором я тестирую

И другой вопрос, когда приложение работает в фоновом режиме, приложение вылетает с этой ошибкой (с использованием этого плагина)

Not разрешено запускать службу Приложение Intent находится в фоновом режиме uid UidRecord

1 Ответ

0 голосов
/ 13 июля 2020

Несколько основных c шагов по устранению неполадок, которые необходимо выполнить:

  1. Проверьте, какие сообщения журнала вы видите при запуске. Это может дать вам представление о том, где происходит сбой.

  2. Убедитесь, что вашему приложению успешно предоставлено разрешение на определение местоположения в настройках вашего приложения. Инструкции для этого зависят от платформы. при правильной настройке вы должны увидеть запись о местоположении в списке разрешений вашего приложения в настройках с предоставленным местоположением.

  3. Убедитесь, что ваш uuid, major и minor указаны правильно в этом утверждении: new BeaconRegion(id, uuid, 100, 1) - если вы используете готовый детектор маяков, например Locate Beacon, на том же телефоне, обнаруживает ли он маяк с теми же идентификаторами?

...