每 1 秒将来自 android studio 的传感器数据插入 SQLite 数据库?

问题描述

我正在使用 Android Studio 开发一个应用程序,该应用程序将从手机传感器(加速度计和陀螺仪)收集的数据存储到 sqlite 数据库中。该应用程序运行良好,sqlite 数据库正在接收插入的值。 现在的问题是,它插入了太多的值,以至于每微秒插入一个值。我已经尝试了每个采样周期(SENSOR_DELAY_norMAL,SENSOR_DELAY_UI)但无济于事。我的目标是每 1 秒只插入一次值以减少计算使用量。是否可以控制数据插入的速度,如果可以,请各位大佬指点一下?

加速度计和陀螺仪监听器:

 //Creating the sensor manager; SENSOR_SERVICE is used to access sensors.
        sM = (SensorManager) getSystemService(SENSOR_SERVICE);

        //Accelerometer Sensor.
        accelerometer = sM.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        
        if(accelerometer != null){

            //Register sensor listener;
            sM.registerListener(this,accelerometer,100_000_000);
            Log.d("TAG 1 Accelerometer ","onCreate initializing accelerometer");

        } else{
            xText.setText("Accelerometer not supported");
            yText.setText("Accelerometer not supported");
            zText.setText("Accelerometer not supported");
        }


        //GYRO Sensor.
        gyroscope = sM.getDefaultSensor(Sensor.TYPE_gyroscope);

        if(gyroscope != null){

            //Register sensor listener;
            sM.registerListener(this,gyroscope,100_000_000);
            Log.d("TAG 2 gyroscope","onCreate initializing gyroscope");

        } else{
            xTextGyro.setText("gyroscope not supported");
            yTextGyro.setText("gyroscope not supported");
            zTextGyro.setText("gyroscope not supported");
        }

onSensorChanged():

@Override
    public void onSensorChanged(SensorEvent event) {
        Sensor sensorType = event.sensor;
        Location location = null;

        if(sensorType.getType()==Sensor.TYPE_ACCELEROMETER) {


            accelX = event.values[0];
            accelY = event.values[1];
            accelZ = event.values[2];

           xText.setText("X: " + event.values[0]);
           yText.setText("Y: " + event.values[1]);
           zText.setText("Z: " + event.values[2]);

            xText.setText("X: " + accelX);
            yText.setText("Y: " + accelY);
            zText.setText("Z: " + accelZ);


        }  else if (sensorType.getType() == Sensor.TYPE_gyroscope){
            xTextGyro.setText("X: " + event.values[0]);
            yTextGyro.setText("Y: " + event.values[1]);
            zTextGyro.setText("Z: " + event.values[2]);

           gyroX = event.values[0];
           gyroY = event.values[1];
           gyroZ = event.values[2];
        }

DatabaseHelper 类:

public class DatabaseHelper extends sqliteOpenHelper {

    public static final String SENSOR_TABLE = "SENSOR_TABLE";
    public static final String COLUMN_ACCEL_X = "ACCEL_X";
    public static final String COLUMN_ACCEL_Y = "ACCEL_Y";
    public static final String COLUMN_ACCEL_Z = "ACCEL_Z";

    public static final String COLUMN_GYRO_X = "GYRO_X";
    public static final String COLUMN_GYRO_Y = "GYRO_Y";
    public static final String COLUMN_GYRO_Z = "GYRO_Z";
    public static final String COLUMN_CURRENT_SPEED = "CURRENT_SPEED";

    private static DatabaseHelper mInstance;

    public DatabaseHelper(Context context) {

        super(context,String.valueOf(Calendar.getInstance().getTime())+".db",null,1);

        //Date currentTime = Calendar.getInstance().getTime();
       // Log.d("TAG DATE",""+ currentTime);

       // super(context,"Live_Test.db",1);



        sqliteDatabase db = this.getWritableDatabase();
    }

    public static DatabaseHelper getInstance(){
        if(mInstance == null){
            synchronized (DatabaseHelper.class){
                if(mInstance == null){
                    mInstance = new DatabaseHelper(BaseApp.getApp());
                }
            }
        }
        return mInstance;
    }

    @Override
    public void onCreate(sqliteDatabase db) {
        //String createTableStatement= "CREATE TABLE " + SENSOR_TABLE + "( " +  COLUMN_ACCEL_X + " REAL," + COLUMN_ACCEL_Y + " REAL," + COLUMN_ACCEL_Z + " REAL,time DATETIME DEFAULT CURRENT_TIME)";
        String createTableStatement= "CREATE TABLE " + SENSOR_TABLE + "( time DATETIME DEFAULT CURRENT_TIME," +  COLUMN_ACCEL_X + " REAL," + COLUMN_GYRO_X + " REAL," + COLUMN_GYRO_Y + " REAL," + COLUMN_GYRO_Z + " REAL," + COLUMN_CURRENT_SPEED + " REAL)";

        db.execsql(createTableStatement);
        Log.d("TAG database :","DATABASE CREATED");


    }

    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
        db.execsql("DROP TABLE IF EXISTS "+SENSOR_TABLE);
        onCreate(db);

    }

    public void insertTable(float x,float y,float z,float a,float b,float c,double speed){  //put onSensorChanged data to database

        ContentValues contentvalues = new ContentValues();
        contentvalues.put("ACCEL_X",x);
        contentvalues.put("ACCEL_Y",y);
        contentvalues.put("ACCEL_Z",z);

        contentvalues.put("GYRO_X",a);
        contentvalues.put("GYRO_Y",b);
        contentvalues.put("GYRO_Z",c);

        contentvalues.put("CURRENT_SPEED",speed);

        getWritableDatabase().insert(SENSOR_TABLE,contentvalues);

    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)