锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Android 传感器数据获取

时间:2023-05-26 17:07:00 传感器if5505

接着上篇wifi列表获取,我们继续谈论传感器。或者看看代码

我们首先定义一个传感器工具类(因为我只获得了一些传感器,我需要获得额外的传感器来配置它,工具类通过重载提供了不同的结构方法):

 public class SensorUtils implements SensorEventListener {      private SensorManager manager;      /**      * @param context 多个传感器      * @param sensorList      */     public void RegisterSensor(Context context, List sensorList){         manager = (SensorManager) context.getSystemService(SENSOR_SERVICE);         for(Sensor sensors : sensorList){             manager.registerListener(this,sensors,SensorManager.SENSOR_DELAY_NORMAL);         }     }      /**      * @param context 单个传感器      * @param sensor      */     public void RegisterSensor(Context context, Sensor sensor){         manager = (SensorManager) context.getSystemService(SENSOR_SERVICE);         manager.registerListener(this,sensor,SensorManager.SENSOR_DELAY_NORMAL);     }      @Override     public void onSensorChanged(SensorEvent event) {         switch (event.sensor.getType()){             case Sensor.TYPE_ACCELEROMETER:                 ///设置加速度传感器回调监控                 sensorCallBack.acceleratedCallBack(event);                 break;             case Sensor.TYPE_GYROSCOPE:                 ///设置回调监控陀螺仪传感器                 sensorCallBack.gyroscopeCallBack(event);                 break;             case Sensor.TYPE_MAGNETIC_FIELD:                 ///设置磁场传感器回调监控                 sensorCallBack.magneticFieldCallBack(event);                 break;             case Sensor.TYPE_PRESSURE:                 //                 sensorCallBack.pressureCallBack(event);                 break;         }      }      @Override     public void onAccuracyChanged(Sensor sensor, int accuracy) {      }      //使用后记得取消注册     public void UnRegisterSensor(){         if (manager != null){             manager.unregisterListener(this);         }     }      public interface SensorCallBack{         void acceleratedCallBack(SensorEvent event);          void gyroscopeCallBack(SensorEvent event);          void magneticFieldCallBack(SensorEvent event);          void pressureCallBack(SensorEvent event);     }     private SensorCallBack sensorCallBack;      public SensorUtils(SensorCallBack sensorCallBack){         this.sensorCallBack = sensorCallBack;     }  }

然后我们在activity使用工具类:

//初始化 sensorUtils = new SensorUtils(this); sensorUtils.RegisterSensor(this, sensorList);

activity别忘了实现SensorUtil回调监控

public class SensorActivity extends BaseActivity implements SensorUtils.SensorCallBack{    //do something }

然后在你设置的回调监控中实现你想要的功能

  @Override     public void acceleratedCallBack(SensorEvent event) {         ///可以做你想做的操作         if (event != null) {             float[] values = event.values;             float x1 = values[0];             float y1 = values[1];             float z1 = values[2];             StringBuffer stringBuffer = new StringBuffer();             stringBuffer.append(getString(R.string.accelerometer_number)).append("\n");             stringBuffer.append(getString(R.string.x1)).append(x1).append("\n");             stringBuffer.append(getString(R.string.y1)).append(y1).append("\n");             stringBuffer.append(getString(R.string.z1)).append(z1);             if (!viewDateBinding.scrollView.isMove()) {                 handler.post(() -> viewDateBinding.tvAccelerated.setText(stringBuffer.toString()));             }             if (flagAccelerated) {                 DataBassManager.getInstance(SensorActivity.this).insertSensor(new TableBean(null,stringBuffer.toString(),null,null,null));             }             flagAccelerated = false;         }     }      @Override     public void gyroscopeCallBack(SensorEvent event) {         ///可以做你想做的操作         if (event != null) {             float x2 = event.values[0];             float y2 = event.values[1];             float z2 = event.values[2];             StringBuffer stringBuffer = new StringBuffer();             stringBuffer.append(getString(R.string.gyroscope_number)).append("\n");             stringBuffer.append(getString(R.string.x2)).append(x2).append("\n");             stringBuffer.append(getString(R.string.y2)).append(y2).append("\n");             stringBuffer.append(getString(R.string.z2)).append(z2);             if (!viewDateBinding.scrollView.isMove()) {                 handler.post(() -> viewDateBinding.tvGyroscope.setText(stringBuffer.toString()));             }             if (flagGyroscope) {                 DataBassManager.getInstance(SensorActivity.this).insertSensor(new TableBean(null,null,stringBuffer.toString(),null,null));             }             flagGyroscope = false;         }     }      @uppressLint("DefaultLocale")
    @Override
    public void magneticFieldCallBack(SensorEvent event) {
        //可以做自己想要的操作
        if (event != null) {
            float x3 = event.values[0];
            float y3 = event.values[1];
            float z3 = event.values[2];
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append(getString(R.string.magnetic_field_number)).append("\n");
            stringBuffer.append(getString(R.string.x3)).append(String.format("%.2f", x3)).append("\n");
            stringBuffer.append(getString(R.string.y3)).append(String.format("%.2f", y3)).append("\n");
            stringBuffer.append(getString(R.string.z3)).append(String.format("%.2f", z3));
            if (!viewDateBinding.scrollView.isMove()) {
                handler.post(() -> viewDateBinding.tvMagneticField.setText(stringBuffer.toString()));
            }
            if (flagMagneticField) {
                DataBassManager.getInstance(SensorActivity.this).insertSensor(new TableBean(null,null,null,stringBuffer.toString(),null));
            }
            flagMagneticField = false;
        }
    }

    @Override
    public void pressureCallBack(SensorEvent event) {
        //可以做自己想要的操作
        if (event != null) {
            float x4 = event.values[0];
            String str4 = getString(R.string.pressure_number) + x4;
            if (!viewDateBinding.scrollView.isMove()) {
                handler.post(() -> viewDateBinding.tvPressure.setText(str4));
            }
            if (flagPressure) {
                DataBassManager.getInstance(SensorActivity.this).insertSensor(new TableBean(null,null,null,null,str4));
            }
            flagPressure = false;
        }
    }

我这边是将数据通过按钮的点击事件存储进了数据库,注意传感器的回调是实时的,所以如果想要获取某一时刻,需要自己通过boolean去判断是否需要获取回调数据

最后,记得取消监听,因为我是在activity中去注册的,所以取消注册也是在activity中去做:

  protected void onStop() {
        super.onStop();
        sensorUtils.UnRegisterSensor();
    }

 

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章