[英]Android Accelerometer Reading
I want to use multiple classes to display Accelerometer readings. 我想使用多个类来显示加速度计读数。 I have tried to get the accelerometer readings in a single class and it runs perfectly fine.
我试图在单个课程中获得加速度计的读数,并且运行得很好。 But in this code the output is 0.00000 , 0.000000 , 0.00000
但是在此代码中,输出为0.00000,0.000000,0.00000
Here are my two classes: 这是我的两节课:
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. 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);
}
}
You need a mechanism to inform other classes that AccData
has updated values available. 您需要一种机制来通知其他类
AccData
具有可用的更新值。 Typically, this is done by a listener - you already made use of this concept by this code line: 通常,这是由侦听器完成的-您已经在以下代码行中使用了此概念:
public class AccData extends Activity implements SensorEventListener
Your class AccData
gets informed when there was a new SensorEvent. 类
AccData
当有一个新的SensorEvent得到通知。 More information on how to write listeners can be found at this Java tutorials page 有关如何编写侦听器的更多信息,请参见此Java教程页面。
To give you a basic idea: 给你一个基本的想法:
Create an interface for the listener, eg 为侦听器创建一个接口,例如
public interface MyListener{ public void processSensorEvent(SensorEvent event); }
AccData
. AccData
。 Add also a data structure to store the registered listeners. Write a method fireUpdate
in AccData
that is called from within onSensorChanged
and takes the new SensorEvent as argument. 在
AccData
中编写方法fireUpdate
,该方法从onSensorChanged
内onSensorChanged
,并使用新的SensorEvent作为参数。
@Override public void onSensorChanged(SensorEvent event) { acclX = event.values[0]; acclY =event.values[1]; acclZ = event.values[2]; fireUpdate(event);
} }
The purpose of fireUpdate
is to iterate over the list of registered listeners and call their implementation of the method processSensorEvent(SensorEvent event)
fireUpdate
的目的是遍历已注册侦听器的列表,并调用其对processSensorEvent(SensorEvent event)
方法的实现。
private void fireUpdate(SensorEvent event){ for (MyListener listener: MyListeners){ listener.processSensorEvent(event); } }
Let your main activity implement MyListener
. 让您的主要活动实现
MyListener
。
public class MainActivity extends Activity implements MyListener{
Then you will have to implement the method processSensorEvent(SensorEvent event)
in the main activity and can use it to update the textview. 然后,您将必须在主要活动中实现
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.