2.2에서 작동하는 데 사용 된 코드에서 자이로 스코프 데이터를 가져올 수 있었지만 2.3으로 업데이트 한 후 더 이상 작동하지 않습니다. 나는 또한 갤럭시 플레이어에서 휴대 전화의 하드웨어 문제가 아닌지 확인하려고 노력했습니다. 그 중 하나에서 작동하지 않았다. 어떤 제안? 사람들은 Google이 아닌 장치입니다 당신이해야합니다, 그래서2.3.5로 업데이트 한 후 GYROSCOPE가 작동하지 않습니다
:
package my.acc; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorManager; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; import android.widget.ToggleButton; public class myact extends Activity { private SensorManager mSensorManager; Sensor myAcc, myAcc2, myAcc3, myAcc4; MySensorListener listener, listener2,listener3, listener4; EditText mEdit; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final Spinner spinner = (Spinner) findViewById(R.id.spinner); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource( this, R.array.activity_array, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); // Set up the accelerometer reading mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); myAcc = mSensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION); myAcc2 = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); myAcc3 = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION); myAcc4 = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); final ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton); mEdit = (EditText)findViewById(R.id.entry); togglebutton.setOnClickListener(new OnClickListener() { PrintWriter mCurrentFile = null; PrintWriter mCurrentFile2 = null; PrintWriter mCurrentFile3 = null; PrintWriter mCurrentFile4 = null; public void onClick(View v) { // Perform action on clicks if (togglebutton.isChecked()) { String strname = spinner.getSelectedItem().toString(); if (strname.equals("Select Activity")){ strname = mEdit.getText().toString(); } String nameStr = new String("/sdcard/" + strname + "acc" + ".csv"); String nameStr2 = new String("/sdcard/" + strname + "gyr" + ".csv"); String nameStr3 = new String("/sdcard/" + strname + "ori" + ".csv"); String nameStr4 = new String("/sdcard/" + strname + "gra" + ".csv"); File outputFile = new File(nameStr); File outputFile2 = new File(nameStr2); File outputFile3 = new File(nameStr3); File outputFile4 = new File(nameStr4); try { mCurrentFile = new PrintWriter(new FileOutputStream(outputFile)); mCurrentFile2 = new PrintWriter(new FileOutputStream(outputFile2)); mCurrentFile3 = new PrintWriter(new FileOutputStream(outputFile3)); mCurrentFile4 = new PrintWriter(new FileOutputStream(outputFile4)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } mSensorManager.registerListener(listener = new MySensorListener(mCurrentFile), myAcc , SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(listener2 = new MySensorListener(mCurrentFile2), myAcc2 , SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(listener3 = new MySensorListener(mCurrentFile3), myAcc3 , SensorManager.SENSOR_DELAY_UI); mSensorManager.registerListener(listener4 = new MySensorListener(mCurrentFile4), myAcc4 , SensorManager.SENSOR_DELAY_UI); //mSensorManager.registerListener(listener, myAcc2 , SensorManager.SENSOR_DELAY_FASTEST); } else { mSensorManager.unregisterListener(listener, myAcc); mSensorManager.unregisterListener(listener2, myAcc2); mSensorManager.unregisterListener(listener3, myAcc3); mSensorManager.unregisterListener(listener4, myAcc4); mCurrentFile.close(); mCurrentFile2.close(); mCurrentFile3.close(); mCurrentFile4.close(); } } }); } }
package my.acc; import java.io.PrintWriter; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; public class MySensorListener implements SensorEventListener { String comma = new String(","); private PrintWriter mCurrentFile; public MySensorListener(PrintWriter mCurrentFile){ //Creating a file to print the data into this.mCurrentFile = mCurrentFile; } public void onAccuracyChanged(Sensor sensor, int accuracy) { // TODO Auto-generated method stub } public void onSensorChanged(SensorEvent event) { StringBuffer buff = new StringBuffer(); buff.append(String.valueOf(event.sensor.getName())); buff.append(comma); buff.append(String.valueOf(event.timestamp)); buff.append(comma); buff.append(String.valueOf(event.values[0])); buff.append(comma); buff.append(String.valueOf(event.values[1])); buff.append(comma); buff.append(String.valueOf(event.values[2])); mCurrentFile.println(buff.toString()); mCurrentFile.flush(); } }
심지어 여기에 구글에 버그로보고 자신의 반응이다 : 여기 코드는 삼성에 문의하십시오.
자이로 센서에서 얻은 값은 무엇입니까? 절대적으로 0입니까? 아주 작은 값입니까? – NickT
@NickT nothing. 그것은 내 자이로 스코프 센서를 등록하지도 않습니다. 청취자는 전혀 호출되지 않습니다. – theRealWorld
Samsung의 문제인지는 확실하지 않습니다. 나는 LG-P970 전화기에서 똑같은 문제를 관찰했다. Android 2.2에서는 자이로 스코프가 제대로 작동했지만 안드로이드 2.3으로 업데이트 한 후에는 자이로 스코프 판독 값이 항상 0입니다. 가장 심각한 문제는이 문제로 인해 사용자가 응용 프로그램에 대해 부정적인 표를 얻는 것입니다. – jap1968