使用NativeScript读取设备的接近传感器

时间:2019-03-18 16:41:28

标签: nativescript nativescript-plugin

我正在开发一个跨平台的移动应用程序,我需要阅读该设备的接近传感器,该传感器提供有关使用该设备的接近传感器的附近物理对象的距离的信息。

有人在Nativescript中为此目的实现/编写了插件吗?

1 个答案:

答案 0 :(得分:0)

我找到了关于如何使用NativeScript读取Android中的接近传感器的部分答案。一旦我也为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 OS向我们提供的任何其他传感器。有关Android Sensor Overview中传感器的更多信息。我没有使用其他传感器进行检查,因此实现方式可能会有所不同,但我相信概念仍然相同

此解决方案基于here上Brad Martin的解决方案。

要使此答案完整,请发布您的iOS解决方案。