Nativescript中本机传感器的可访问性

时间:2018-11-04 00:18:02

标签: android ios nativescript native

我决定选择在Nativescript(跨平台IOS / Android)中实现应用程序,或相应地使用java / swift做“真实的”本地应用程序。

丢弃明显的1个代码库与2个代码库的讨论,我不确定Nativescript的限制(如果有的话)。

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

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

我找到了几个插件(例如accelerometer plugin),我担心我需要为每个传感器安装一个插件,也许某些传感器会缺少一个插件。这应该引起关注吗?

1 个答案:

答案 0 :(得分:2)

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

如对OP的注释中所述:您将最终使用Sensor Listener来访问onSensorChanged事件中返回的数据。

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

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

从NS导入/获取application模块,以便您可以在下面的示例中访问Android活动

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方法返回一个布尔值,因此您可以检查返回的布尔值是否为true,这意味着侦听器已成功注册,并且当传感器在onSensorChanged事件。