2
서비스를 통해 지구 축에있는 가속도계 센서 데이터를 가져오고 싶습니다. 나는 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();
}
}
}
위치 중력 센서 문이 값을 리턴하지 않는 경우, 변화는 다음 명령문도 gravityValues 작동하지 않도록 널 값을 갖는다. 등록
센서는 I 앱 개발에 초보자 그래서 어떤 도움이 평가 될 것입니다
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);
으로 그들은 다음 등록
mAccelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMagnetsensor = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mGravity = sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);
있습니다.
내 애플리케이션에서이 코드를 시도하면 중력 AVAILIBLE 토스트가 화면에 나타납니다. 다른 제안? –
당신은'중력 센서 에서 값을 얻는 경우 예, 복잡한 아무것도하지 않고, 확인하는 경우 (event.sensor.getType() == Sensor.TYPE_GRAVITY) { \t \t \t에서 System.out.println ("X :"+ event.values [0]); \t \t \t System.out.println ("Y :"+ event.values [1]); \t \t \t System.out.println ("Z :"+ event.values [2]); \t \t \t} ' – Thracian
잘 모르겠지만 Linear_Acceleration 센서를 추가하면 중력 센서가 값을 던지기 시작합니다. –