Я нашел частичный ответ на свой вопрос о том, как читать датчик приближения в 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, если оно у вас есть.
person
Mick Morely
schedule
21.03.2019