Как реализовать собственный код считывания ускорителя в Codename 1 для Android?

Я пытаюсь разработать собственный код в Codename One для считывания данных датчика акселерометра. Я посмотрел, как это делается в коде Android Java, реализовал его в Codename One, скомпилировал без ошибок, но, похоже, он даже не проходит инициализацию класса датчика ниже. Метод sensor.startReading(), кажется, никогда не вызывается. Правильно ли я реализовал собственный код считывания акселерометра?

Вот как я называю свой метод класса считывания датчика:

Sensor sensor = (Sensor)NativeLookup.create(Sensor.class);
   if (sensor != null && sensor.isSupported()) {
       sensor.startReading();
}

Вот как я реализую считывание датчика:

package com.pk.sensors;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.hardware.SensorEventListener;
import android.hardware.SensorEvent;
import android.content.Context;

public class SensorImpl extends Activity implements SensorEventListener {

private SensorManager mSensorManager;
private Sensor mAccelerometer;
private float accelX = 0f;
private float accelY = 0f;
private float accelZ = 0f;

public void startReading() {
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}

public void onSensorChanged(SensorEvent event) {
    this.accelX = event.values[0];
    this.accelY = event.values[1];
    this.accelZ = event.values[2];
}

public String getAcceleration() {
    return String.valueOf(this.accelX) + " " + 
            String.valueOf(this.accelY) + " " + 
            String.valueOf(this.accelZ);
}

public boolean isSupported() {
    return true;
}

protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
}

protected void onPause() {
    super.onPause();
    mSensorManager.unregisterListener(this);
}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}

Это руководство, из которого я реализовал считывание акселератора: http://www.techrepublic.com/blog/software-engineer/a-quick-tutorial-on-coding-androids-accelerometer/


person pkout    schedule 16.02.2015    source источник


Ответы (1)


Не расширяйте действие, в CodenameOne есть 1 основное действие, и вы должны использовать его. Получите ссылку на это действие следующим образом:

android.app.Activity ctx = com.codename1.impl.android.AndroidNativeUtil.getActivity();

Тогда воспользуйтесь услугой:

 mSensorManager = (SensorManager) ctx.getSystemService(Context.SENSOR_SERVICE);
person Chen    schedule 16.02.2015
comment
Это сделало это. Благодарю вас! - person pkout; 16.02.2015
comment
Если у меня может быть дополнительный менее важный вопрос: мой Netbeans не распознает com.codename1.impl.android. Он останавливается на реализации. Однако он работает на сервере сборки Codename 1. Там компилируется нормально. Нужно ли мне устанавливать какие-то дополнительные библиотеки, чтобы моя IDE распознавала пространство имен? - person pkout; 16.02.2015
comment
Нет, совершенно нормально, что IDE этого не распознает. - person Chen; 17.02.2015
comment
Я имел в виду, что я хотел бы, чтобы IDE распознала его, чтобы он не давал мне этих уродливых красных подчеркиваний ошибок в этой строке. Если вы знаете, какую библиотеку мне нужно включить, чтобы IDE распознала ее, пожалуйста, дайте мне знать. Если не знаете, не тратьте время. Спасибо! - person pkout; 17.02.2015