我还在学习Android开发,很抱歉,如果这个问题看起来很愚蠢,但我只想在有限时间内通过手机获取加速计数据。目标是在点击按钮后,传感器的x坐标值仅记录约3秒钟。
public class AccelerometerTestingActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
float x_event[];
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
// add listener. The listener will be HelloAndroid (this) class
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_GAME);
}
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];
x_event=addArrayElement(x_event,x);
}
}
private float[] addArrayElement(float[] currentArray, float x) {
// TODO Auto-generated method stub
float newArray[] = new float[currentArray.length+1];
int i= 0;
for(i=0;i<currentArray.length;i++)
{
newArray[i] = currentArray[i];
}
newArray[i+1]=x;
return newArray;
}
因此x_event是一个数组,每个SENSOR_DELAY_GAME周期性地填充加速度计的X位置。
问题是,此代码在活动运行时记录所有值。
我想要的是这个数组只能从单击一个按钮时填充,并且只填充x秒(尚未确定x的值)。之后,数组将被传递给另一个函数进行分析。
我只是不明白如何及时限制听众。
感谢您的帮助。
答案 0 :(得分:1)
这是一个快速的解决方案;
在您注册听众后的onCreate()
中,您可以这样做:
final SensorEventListener listener = this;
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
sensorManager.unregisterListener(listener);
}
}, theTimeInMilliseconds);
您还应该考虑使用列表而不是数组来保存您的值,因此您不必在每次获得新值时重新创建它:
ArrayList<Float> xEvent = new ArrayList<Float>();
并添加项目:
xEvent.add(event.values[0]);
答案 1 :(得分:0)
您是否考虑使用定时器,在延迟3秒后, - 取消注册监听器 - 调用您的分析功能 ?
答案 2 :(得分:0)
只需使用Timer类方法每1秒做一次
df.groupby('Company').head(1)
Out:
Company Country
0 ABC USA
2 BCD USA
我认为更好的解决方案