我有以下代码:
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,Intent intent)
我想直接读取感官数据,而不是使用听众,是否可能?
答案 0 :(得分:2)
首先,从不在主应用程序主题中调用Thread.sleep()
。
其次,startActivityForResult()
是异步的。 <{1}}返回时,其他活动不会开始。
第三,传感器事件是异步的。
所以传感器活动等待一些 原因
在您离开主要应用程序主题之前无法启动,主要应用程序主题与您的startActivityForResult()
来电相关。
然后主要活动什么都没有 做,传感器正在发挥作用。
正。
我想直接读取感官数据, 不使用听众,是否可能?
没有。只需正确使用听众。 Here are three sample projects显示了传感器监听器的使用。