Nativescript 中原生传感器的可访问性

Accessability of native sensors in Nativescript

我决定选择在 Nativescript(跨平台 IOS/Android)中实现一个应用程序,或者相应地使用 java/swift 做一个 'real' 本机应用程序。

抛开明显的 1 代码库与 2 代码库讨论,我不确定 Nativescript 的局限性(如果有的话)。

主要问题在于应用程序对传感器数据的大量需求。我必须在应用程序中使用很多 phone 传感器。像 android sensors.

这样的传感器

我主要了解 Nativescript 的功能。但问题是,考虑到应用对原生传感器数据的大量需求,选择 Nativescript 是否会影响传感器的可访问性或整体性能?

我发现了几个插件(比如这个 accelerometer plugin),我担心每个传感器都需要一个插件,并且可能某些传感器缺少插件。这应该引起关注吗?

访问任何传感器都没有限制。正如您提到的,有加速度计插件,还有其他一些插件。但是,根据传感器的不同,您可能必须将一些逻辑写入那些 API,如果您考虑使用 java/swift,这应该不会太具有挑战性。 Here 是我最近的工作,我需要在 WearOS 应用程序上使用心率传感器,目前这不是一个生产项目,但计划最终发布。

如 OP 评论中所述:您最终将使用传感器侦听器访问 onSensorChanged 事件中返回的数据。

以下代码是如何访问设备上的心率传感器。

首先,获取设备传感器管理器:

Import/require 来自 NS 的 application 模块,因此您可以访问下面示例中的 Android activity

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

  const activity: android.app.Activity =
    application.android.startActivity ||
    application.android.foregroundActivity;
  const mSensorManager = activity.getSystemService(
    android.content.Context.SENSOR_SERVICE
  ) as android.hardware.SensorManager;

然后创建我们的监听器:

const myHrListener = new android.hardware.SensorEventListener({
      onAccuracyChanged: (sensor, accuracy) => {},
      onSensorChanged: event => {
        console.log(event.values[0]);
        const HR = event.values[0].toString().split('.')[0];
        // HR is the BPM from the sensor here
      }
    });

然后我们需要获取传感器:

const mHeartRateSensor = mSensorManager.getDefaultSensor(
    android.hardware.Sensor.TYPE_HEART_RATE
  );

最后,我们注册监听器:

const didRegListener = mSensorManager.registerListener(
    myHrListener,
    mHeartRateSensor,
    android.hardware.SensorManager.SENSOR_DELAY_NORMAL
  );

registerListener 方法 returns 一个布尔值,因此您可以检查返回的布尔值是否为 true ,这意味着侦听器已成功注册,您将在以下时间获得数据传感器在 onSensorChanged 事件中提供它。