Я разрабатываю кроссплатформенное мобильное приложение, и мне нужно считывать датчик приближения устройства, который предоставляет информацию о расстоянии до ближайшего физического объекта с помощью датчика приближения устройства.

Кто-нибудь реализовал это / написал плагин для этой цели в Nativescript?

0
Mick Morely 18 Мар 2019 в 19:41

1 ответ

Лучший ответ

Я нашел частичный ответ на свой вопрос о том, как читать датчик приближения в Android с помощью NativeScript. Я обновлю свой ответ, как только напишу код для iOS.

Чтобы получить доступ к датчику в Android, сначала нам нужно импортировать модули «приложения» и «платформы», которые предоставляет NS:

import * as application from "tns-core-modules/application";
import * as platform from 'tns-core-modules/platform';

declare var android: any;

Затем приобретите диспетчер датчиков Android, датчик приближения, создайте прослушиватель событий Android и зарегистрируйте его для прослушивания изменений в датчике приближения.

Чтобы зарегистрировать датчик приближения:

registerProximityListener() {

        // Get android context and Sensor Manager object
        const activity: android.app.Activity = application.android.startActivity || application.android.foregroundActivity;
        this.SensorManager = activity.getSystemService(android.content.Context.SENSOR_SERVICE) as android.hardware.SensorManager;

        // Creating the listener and setting up what happens on change
        this.proximitySensorListener = new android.hardware.SensorEventListener({
            onAccuracyChanged: (sensor, accuracy) => {
                console.log('Sensor ' + sensor + ' accuracy has changed to ' + accuracy);
            },
            onSensorChanged: (event) => {
                console.log('Sensor value changed to: ' + event.values[0]);
            }
        });

        // Get the proximity sensor
        this.proximitySensor = this.SensorManager.getDefaultSensor(
            android.hardware.Sensor.TYPE_PROXIMITY
        );

        // Register the listener to the sensor
        const success = this.SensorManager.registerListener(
            this.proximitySensorListener,
            this.proximitySensor,
            android.hardware.SensorManager. SENSOR_DELAY_NORMAL
        );

        console.log('Registering listener succeeded: ' + success);
    }

Чтобы отменить регистрацию прослушивателя событий, используйте:

unRegisterProximityListener() {
        console.log('Prox listener: ' + this.proximitySensorListener);
         let res = this.SensorManager.unregisterListener( this.proximitySensorListener);
         this.proximitySensorListener = undefined;
         console.log('unRegistering listener: ' + res);
    };

Конечно, мы можем заменить android.hardware.Sensor.TYPE_PROXIMITY на любой другой датчик, который нам предоставляет ОС Android. Подробнее о датчиках см. Обзор датчиков Android. Я не проверял это с другими датчиками, поэтому реализация может быть немного другой, но я считаю, что концепция все та же

Это решение основано на решении Брэда Мартина, которое можно найти здесь.

Чтобы ответить на этот вопрос, опубликуйте свое решение для iOS, если оно у вас есть.

0
Mick Morely 21 Мар 2019 в 13:40