gpt4 book ai didi

android - 重力传感器监听器不工作

转载 作者:行者123 更新时间:2023-11-29 01:09:52 25 4
gpt4 key购买 nike

我想通过服务获取地轴上的加速度计传感器数据。我在 stackoverflow 上的一篇帖子中也读到了一种方法。但我有一个问题。

@Override
public void onSensorChanged(SensorEvent event) {
Toast.makeText(this, "Hollyy shiiitt",Toast.LENGTH_SHORT);
String acceldata = "";

float[] gravityValues = null;
float[] magneticValues = null;

if (event.sensor.getType() == Sensor.TYPE_GRAVITY) {
gravityValues = event.values.clone();
Toast.makeText(this, "The gra data is " + String.valueOf(gravityValues), Toast.LENGTH_SHORT);
}

if ((gravityValues != null) && (magneticValues != null)
&& (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)) {

// float for use in conversion device relative acceleration to earth axis acceleration
float[] deviceRelativeAcceleration = new float[4];
deviceRelativeAcceleration[0] = event.values[0];
deviceRelativeAcceleration[1] = event.values[1];
deviceRelativeAcceleration[2] = event.values[2];
deviceRelativeAcceleration[3] = 0;

// Change the device relative acceleration values to earth relative values
// X axis -> East
// Y axis -> North Pole
// Z axis -> Sky

float[] R = new float[16], I = new float[16], earthAcc = new float[16];

SensorManager.getRotationMatrix(R, I, gravityValues, magneticValues);

float[] inv = new float[16];

android.opengl.Matrix.invertM(inv, 0, R, 0);
android.opengl.Matrix.multiplyMV(earthAcc, 0, inv, 0, deviceRelativeAcceleration, 0);

acceldata = String.valueOf(lat) + "," + String.valueOf(lon) + "," + String.valueOf(speed)+","+ String.valueOf(earthAcc[0]) + "," + String.valueOf(earthAcc[1]) + "," + String.valueOf(earthAcc[2])+ "," + String.valueOf(event.values[0])+ "," + String.valueOf(event.values[1])+ "," + String.valueOf(event.values[2]);

}

//SDK version check
if(Build.VERSION.SDK_INT > 18) {
File file;
FileWriter filew; // Internal Storage writing
try {
file = new File(getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS) + "/" + filename); //Android 4.4 and above
filew = new FileWriter(file, true); //true for append
filew.write(acceldata + String.valueOf(gravityValues) + String.valueOf(magneticValues) + "\n");
filew.close();


} catch (Exception e) {
e.printStackTrace();

}
}
else{
String data = acceldata + "\n" ;
try {
FileOutputStream fOut = openFileOutput("/" + filename,Context.MODE_APPEND);
fOut.write(data.getBytes());
fOut.close();
Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(getBaseContext(),"file not saved API < 19",Toast.LENGTH_SHORT).show();
}
}

}

重力传感器位置更改的 if 语句不返回任何值,因此下一条语句也不起作用,因为 gravityValues 具有空值。

注册的传感器是

mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetsensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

然后他们被注册为

int SamplingFrequency = 2 * 100000; // delay in microsecond. in this case 0.2 second
sensorManager.registerListener(this, mAccelerometer,SamplingFrequency);
sensorManager.registerListener(this, mMagnetsensor, SamplingFrequency);
sensorManager.registerListener(this,mGravity,SamplingFrequency);

我是应用程序开发的新手,如有任何帮助,我们将不胜感激。

最佳答案

您的设备可能没有重力传感器。检查是否可用

if (mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY) != null) {
Toast.makeText(ActivitySensor1Availability.this, "Gravity AVAILABLE", Toast.LENGTH_SHORT).show();
} else {
// Failure! No Gravity Sensor.
Toast.makeText(ActivitySensor1Availability.this, "Failure! No Gravity Sensor", Toast.LENGTH_SHORT).show();
}

关于android - 重力传感器监听器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43955501/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com