问题描述
我正在使用 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 (将#修改为@)