我有以下代碼:從Android的傳感器獲取的數據,而不聽衆
public class readSensorsData extends Activity implements SensorListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sm = (SensorManager) getSystemService(SENSOR_SERVICE);
}
@Override
public void onSensorChanged(int sensor, float[] values) {
synchronized (this) {
if (sensor == SensorManager.SENSOR_ORIENTATION) {
//get orientation
}
if (sensor == SensorManager.SENSOR_ACCELEROMETER) {
//get acceleration
}
}
if (sensor == SensorManager.SENSOR_MAGNETIC_FIELD) {
//get magnetic fiels
}
Bundle bundle = new Bundle(); //results from activity
bundle.putFloatArray("acceleration", array);
Intent mIntent = new Intent();
mIntent.putExtras(bundle);
setResult(RESULT_OK, mIntent);
finish();
}
public void onAccuracyChanged(int sensor, int accuracy) {
}
@Override
protected void onResume() {
super.onResume();
sm.registerListener(this,
SensorManager.SENSOR_ORIENTATION |
SensorManager.SENSOR_ACCELEROMETER |
SensorManager.SENSOR_MAGNETIC_FIELD,
SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onStop() {
sm.unregisterListener(this);
super.onStop();
}
}
代碼工作,但在這裏不用我的問題:當我這樣稱呼它從主要活動:
Intent i = new Intent(this, readSensorsData.class);
startActivityForResult(i, 1); //1 is for sensors
for(int j=0;j<10;j++)
{
//do sth else here!!!!
try {
Thread.sleep(1000);
} catch (InterruptedException e) {e.printStackTrace();}
//here code for showing result from sensor activity
}
然後我可以看到10次'做別的事!當循環結束時,我可以看到活動結果。因此,傳感器活動等待某種原因,然後當主要活動無關時,傳感器正在完成其工作。
當然我有很好的落實:onActivityResult(INT requestCode,INT resultCode爲,意圖意圖)
我想直接讀取sensord數據,不使用監聽器,這可能嗎?
在這些例子中,你只需要使用1個傳感器的活動 我想發送使用Wi-Fi包的信息包括,方向,加速等,所以除了我不能使用thread.sleep()我的事實仍然不知道如何從傳感器獲取數據,我可以多次調用startActivityForResult,讓循環1000次,開始這個sctivity和摧毀..等等。在我看來它效率不高,所以我該如何解決它?也許使用服務? – questioner 2010-05-24 13:09:42
嗯,我想我知道,我只是使用線程來使用這個傳感器 – questioner 2010-05-24 13:13:12
如果你想聚合或平均數據超過1000報告,只需將它們附加到ArrayList或'onSensorChanged()'的東西。當第1000份報告進入時,然後使用「AsyncTask」執行計算(如果有)並將數據發送到服務器。 – CommonsWare 2010-05-24 13:45:53