簡體   English   中英

Android加速度計讀數

[英]Android Accelerometer Reading

我想使用多個類來顯示加速度計讀數。 我試圖在單個課程中獲得加速度計的讀數,並且運行得很好。 但是在此代碼中,輸出為0.00000,0.000000,0.00000

這是我的兩節課:

package com.example.sample;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    AccData accl=new AccData();     

    accl.mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    accl.sensor = accl.mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    accl.register();
    String result=accl.getAccelerometerReading();
    TextView display=(TextView)findViewById(R.id.tv);
    display.setText(result);

}
}

2。

package com.example.sample;


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

public class AccData extends Activity implements SensorEventListener {


public float acclX,acclY,acclZ;
public SensorManager mSensorManager;
public Sensor sensor;


@Override
public void onSensorChanged(SensorEvent event) {
    // TODO Auto-generated method stub
    acclX = event.values[0];
    acclY =event.values[1];
    acclZ = event.values[2];
    }

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
    // TODO Auto-generated method stub

}


public void register() {
    // TODO Auto-generated method stub
    mSensorManager.registerListener(this, sensor,SensorManager.SENSOR_DELAY_NORMAL);
}
protected void unregister() {
    mSensorManager.unregisterListener(this, sensor);
}
protected String getAccelerometerReading()
{
    return String.format("%7f" + ", %7f"+ ", %7f" ,acclX,acclY,acclZ);  
}
}

您需要一種機制來通知其他類AccData具有可用的更新值。 通常,這是由偵聽器完成的-您已經在以下代碼行中使用了此概念:

public class AccData extends Activity implements SensorEventListener

AccData當有一個新的SensorEvent得到通知。 有關如何編寫偵聽器的更多信息,請參見此Java教程頁面。

給你一個基本的想法:

  • 為偵聽器創建一個接口,例如

     public interface MyListener{ public void processSensorEvent(SensorEvent event); } 
  • 將registerListener / unregisterListener方法添加到類AccData 還添加一個數據結構來存儲注冊的偵聽器。
  • AccData中編寫方法fireUpdate ,該方法從onSensorChangedonSensorChanged ,並使用新的SensorEvent作為參數。

     @Override public void onSensorChanged(SensorEvent event) { acclX = event.values[0]; acclY =event.values[1]; acclZ = event.values[2]; fireUpdate(event); 

    }

  • fireUpdate的目的是遍歷已注冊偵聽器的列表,並調用其對processSensorEvent(SensorEvent event)方法的實現。

     private void fireUpdate(SensorEvent event){ for (MyListener listener: MyListeners){ listener.processSensorEvent(event); } } 
  • 讓您的主要活動實現MyListener

     public class MainActivity extends Activity implements MyListener{ 
  • 然后,您將必須在主要活動中實現processSensorEvent(SensorEvent event) ,並可以使用它來更新textview。

     public void processSensorEvent(SensorEvent event){ TextView display=(TextView)findViewById(R.id.tv); display.setText(event.values[0] + " " + event.values[1] + " " + event.values[2]); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM