Доступность нативных сенсоров в Nativescript - PullRequest
0 голосов
/ 04 ноября 2018

Я решил выбрать реализацию приложения в Nativescript (кросс-платформенный IOS / Android) или создать «настоящее» нативное приложение с java / swift соответственно.

Отказываясь от очевидного обсуждения кодовой базы 1 и 2, я не уверен в ограничениях Nativescript, если таковые имеются.

Основная проблема заключается в большом спросе приложения на данные датчиков. Я должен использовать много телефонных датчиков в приложении. Датчики, такие как датчики Android .

В основном я понимаю, что делает Nativescript. Но вопрос в том, повлияет ли выбор Nativescript на доступность датчиков или общую производительность, учитывая высокую потребность приложения в собственных данных датчиков?

Я нашел несколько плагинов (например, плагин акселерометра ), и я беспокоюсь, что мне понадобится плагин для каждого датчика, и, возможно, для некоторых из них будет отсутствовать плагин. Должно ли это быть беспокойство?

1 Ответ

0 голосов
/ 04 ноября 2018

Не будет ограничений для доступа к любому из датчиков. Как вы упомянули, есть плагин акселерометра и есть несколько других. Однако, в зависимости от датчика, вам, возможно, придется написать часть своей логики для этих API, что не должно быть слишком сложным, если вы собираетесь использовать java / swift ?. Здесь - это то, над чем я недавно работал, когда мне понадобился датчик сердечного ритма в приложении WearOS, на данный момент это не производственный проект, но его планируется выпустить в конце концов.

Как упомянуто в комментариях к OP: в конечном итоге вы будете использовать Sensor Listener для доступа к данным, которые возвращаются в событии onSensorChanged.

Следующий код показывает, как получить доступ к датчику сердечного ритма на устройстве.

Сначала получите диспетчер датчиков устройства:

Импортируйте / требуйте модуль application из NS, чтобы вы могли получить доступ к активности 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 .

...