![](/img/trans.png)
[英]How to load data from database at the time of class loading by JVM and store it in List or Map for further use?
[英]How to store and use data from accelerometer for 3 seconds of time?
首先,對這個愚蠢的問題感到抱歉。
我想做的是在三秒鍾內每秒捕獲一次加速度計數據,並添加這些數據,但是由於缺乏經驗,我發現很難做到這一點。
到目前為止,我已經完成的工作是:
實時獲取X,Y,X軸的加速度數據,並計算出最終的加速度,即result_acceleration = Math.sqrt(X ^ 2 + y ^ 2 + z ^ 2)也是實時的 ,並且會隨着時間不斷變化。
我想做的是:
在第一,第二和第三第二端查找resultant_acceleration,即A1,A2,A3和回報(A1 + A2 + A3)我經歷艱難的時刻在Java中,做任務寫一個方法。
public void onSensorChanged(SensorEvent event) {
final ArrayList<Double> accln = new ArrayList<>();
//enter your code here
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
if (!mInitialized) {
mLastX = x;
mLastY = y;
mLastZ = z;
mInitialized = true;
} else {
float deltaX = Math.abs(mLastX - x);
float deltaY = Math.abs(mLastY - y);
float deltaZ = Math.abs(mLastZ - z);
if (deltaX < NOISE) deltaX = (float) 0.0;
if (deltaY < NOISE) deltaY = (float) 0.0;
if (deltaZ < NOISE) deltaZ = (float) 0.0;
mLastX = x;
mLastY = y;
mLastZ = z;
final double a =Math.sqrt((deltaX*deltaX)+(deltaY*deltaY)+(deltaZ*deltaZ));
accln.add(a); //what i am trying to do here is collect the sample data of acceleration in an array list for 3 seconds,// so later i can calculate average acceleration
}
}
我建議啟動一個計時器,然后在達到1000毫秒時進行測量,然后在2000和3000進行測量。這可能會有所幫助: Android計時器? 如何?
只需使用Timer類方法每1秒執行一次
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
// Just calculate your accleration here
}
}, 0, 1000);
您從未提及您要以何種速率獲取加速度數據,所以我只是想知道它將達到〜5hz( SENSOR_DELAY_NORMAL
)。 請記住,這只是一個提示。 如果另一個應用程序以更快的速率注冊加速傳感器數據,則可能以更快的速率獲得事件。 至於代碼:
// SOMEWHERE IN YOUR APP
final ArrayList<Double> accln = new ArrayList<>(); //THIS SHOULD BE OUTSIDE YOUR CALLBACK!
final SensorEventListener eventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
//enter your code here
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
if (!mInitialized) {
mLastX = x;
mLastY = y;
mLastZ = z;
mInitialized = true;
} else {
float deltaX = Math.abs(mLastX - x);
float deltaY = Math.abs(mLastY - y);
float deltaZ = Math.abs(mLastZ - z);
if (deltaX < NOISE) deltaX = (float) 0.0;
if (deltaY < NOISE) deltaY = (float) 0.0;
if (deltaZ < NOISE) deltaZ = (float) 0.0;
mLastX = x;
mLastY = y;
mLastZ = z;
final double a = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY) + (deltaZ * deltaZ));
accln.add(a); //what i am trying to do here is collect the sample data of acceleration in an array list for 3 seconds,// so later i can calculate average acceleration
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
SensorManager sensorManager = (SensorManager) context.getSystemService(SENSOR_SERVICE);
Handler handler = new Handler();
Sensor accel = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sensorManager.registerListener(eventListener, accel, SensorManager.SENSOR_DELAY_NORMAL); //~5hz of data
handler.postDelayed(new Runnable() {
@Override
public void run() {
sensorManager.unregisterListener(eventListener);
}
}, 5000);
這將注冊您的偵聽器,並在5秒鍾后從可運行的處理程序中注銷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.