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
事件中提供它。
我决定选择在 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
事件中提供它。