【问题标题】:Is it possible to get Android accelerometer values inside onCreate method?是否可以在 onCreate 方法中获取 Android 加速度计值?
【发布时间】:2013-06-11 11:17:51
【问题描述】:

是否可以在onCreate 方法中获取 Android 加速度计值?我要它, 以便在阅读后进行一些初始化。到目前为止,我已经注册 传感器侦听器在它们通过onSensorChanged 更改时获取这些值 打回来。我有 3 个浮点属性(lastxlastylastz)初始化为 -1,以便在更改时将加速度计值存储在那里。在onCreate 方法中,注册我的传感器侦听器后,我试图检查这些值,但它们始终等于-1。有没有办法在onCreate 方法中获取这些值?

这是我的代码:

public class MainActivity extends Activity implements SensorEventListener {
    private SensorManager sensorManager;

    TextView textView;
    StringBuilder builder = new StringBuilder();
    float lastx = -1;
    float lasty = -1;
    float lastz = -1;

    @Override
    public void onCreate(Bundle savedInstanceState){

        super.onCreate(savedInstanceState);
        textView = new TextView(this);

        SensorManager manager = (SensorManager) 
                     getSystemService(Context.SENSOR_SERVICE);

        Sensor accelerometer = manager.getDefaultSensor(
                                     Sensor.TYPE_ACCELEROMETER);

        if(!manager.registerListener(this, accelerometer,
                                     SensorManager.SENSOR_DELAY_GAME)){
        Log.d("ERROR: ", "NO accelerometer found!");
        }

        setContentView(textView);
        builder.setLength(0);

        builder.append(
           "X " + this.lastx + "\nY " + this.lasty + "\nZ " + this.lasty);
        textView.setText(builder.toString());

         Log.d(" * accelerometer values:",
            "X: " + this.lastx+", Y: " + this.lasty + ", Z: " + this.lastz);

    }

    public void onAccuracyChanged(Sensor sensor,int accuracy){

    }

    public void onSensorChanged(SensorEvent event){

            // check sensor type
            if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

                 // assign directions
                 float x=event.values[0];
                 float y=event.values[1];
                 float z=event.values[2];

                 this.lastx = x;
                 this.lasty = y;
                 this.lastz = z;

                 // builder.setLength(0);
                 // builder.append("X " + x + "\nY " + y + "\nZ " + z);
                 // textView.setText(builder.toString());
      }
  }
}

【问题讨论】:

  • "我想要,读完后做一些初始化" -- 把你的初始化放在onSensorChanged()

标签: android initialization accelerometer android-sensors oncreate


【解决方案1】:

我认为主用户界面线程同时用于onCreateonSensorChanged。所以onSensorChangedonCreate 完成之前无法运行。无论您需要做什么初始化,我建议您安排在第一次致电onSensorChanged 时完成,例如如果值为 -1,则进行初始化。

【讨论】:

  • 好的,谢谢。我已经考虑过这个解决方案,我确信它有效。但我很好奇是否可以从 onCreate 函数内部获取这些值,即使是其他方式,也许是一种 hacky 方式。
  • 由于我提到的线程原因,任何此类方法都不会通过onSensorChanged。如果有这样的方法,那我就不知道了。此外,如果手机稍微移动(如果有人刚刚启动您的应用程序,因为他们将拿着设备,这很可能),那么您将看到的加速度计值非常不稳定。因此,我发现很难根据看起来几乎是随机输入的内容来想象您想要进行哪些有用的初始化。
  • 好的,是的,你完全正确。我再等一会儿。如果没有其他答案,我会将您的答案标记为正确答案。感谢您的宝贵时间!
【解决方案2】:

先初始化一些变量。

int value , count = 0 , newVal;

onSensorChanged 内部

if(count == 0){

            value = (int) event.values[0];

            count++;

        }

        newVal = (int) event.values[0] - value ;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多