我决定选择在Nativescript(跨平台IOS / Android)中实现应用程序,或相应地使用java / swift做“真实的”本地应用程序。
丢弃明显的1个代码库与2个代码库的讨论,我不确定Nativescript的限制(如果有的话)。
主要问题在于应用对传感器数据的大量需求。我必须在应用程序中使用很多电话传感器。像android sensors之类的传感器。
我大致了解Nativescript的功能。但是问题是,考虑到应用对本地传感器数据的大量需求,选择Nativescript是否会影响传感器的可访问性或整体性能?
我找到了几个插件(例如accelerometer plugin),我担心我需要为每个传感器安装一个插件,也许某些传感器会缺少一个插件。这应该引起关注吗?
答案 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
事件。