【问题标题】:Obtaining data from Android sensors without Listeners在没有侦听器的情况下从 Android 传感器获取数据
【发布时间】:2010-05-24 11:43:25
【问题描述】:

我有以下代码:

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)

我想直接读取传感器数据,而不是使用监听器,可以吗?

【问题讨论】:

    标签: android android-activity sensors


    【解决方案1】:

    首先,从不在主应用程序线程中调用Thread.sleep()

    其次,startActivityForResult() 是异步的。当startActivityForResult() 返回时,其他活动不会开始。

    第三,传感器事件是异步的。

    所以传感器活动等待一些 原因

    在您退出主应用程序线程之前,它无法启动,该线程被您的 Thread.sleep() 调用所束缚。

    然后当主要活动无事可做时 做,传感器正在做他们的工作。

    没错。

    我想直接读取传感器数据, 不使用监听器,有可能吗?

    没有。只需正确使用侦听器即可。 Here are three sample projects 展示了传感器监听器的使用。

    【讨论】:

    • 在这些示例中,您只需为 1 个传感器使用 1 个活动,我想使用 Wi-Fi 信息包向其发送包括方向、加速度等信息,所以除了我不能使用线程这一事实。 sleep() 我仍然不知道如何从传感器获取数据,我可以多次调用 startActivityForResult 吗,让我们说循环 1000 次,启动这个 stivity 并销毁..等等。在我看来它效率不高,我该如何解决呢?也许使用服务?
    • 嗯,我想我知道了,我会用线程来处理这个传感器
    • 如果您想汇总或平均超过 1000 个报告的数据,只需将它们附加到 ArrayList 或 onSensorChanged() 中的其他内容。当第 1000 个报告进来时,使用AsyncTask 执行您的计算(如果有)并将数据发送到您的服务器。
    • 我想在 1 个数据包中发送来自传感器的信息、一些文本、其他数据然后再次发送相同结构的更新信息我不想获得 1000 个结果然后发送它,我想要每条数据,然后像这样发送和循环它: for(;;){ 1) 从传感器获取新数据; 2) 发送; }
    猜你喜欢
    • 2012-12-27
    • 2018-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多