2016-03-10 3 views
2

Как я могу узнать, сколько устройств было повернуто? Я имею в виду, если я начну с начальной позиции и повернусь на 90 градусов, как я могу сделать этот код, скажите мне, что я повернулся на 90 градусов? Извините за неряшливость вопроса. Вот мой код:Гироскоп: разница в поворотах Android

import android.app.Activity; 
import android.hardware.Sensor; 
import android.hardware.SensorEvent; 
import android.hardware.SensorEventListener; 
import android.hardware.SensorManager; 
import android.os.Bundle; 
import android.widget.TextView; 

public class AccessGyroscope extends Activity implements SensorEventListener 
{ 
//a TextView 
private TextView tv; 
//the Sensor Manager 
private SensorManager sManager; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //get the TextView from the layout file 
    tv = (TextView) findViewById(R.id.tv); 

    //get a hook to the sensor service 
    sManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
} 

//when this Activity starts 
@Override 
protected void onResume() 
{ 
    super.onResume(); 
    /*register the sensor listener to listen to the gyroscope sensor, use the 
    * callbacks defined in this class, and gather the sensor information as 
    * quick as possible*/ 
    sManager.registerListener(this, sManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_FASTEST); 
} 

//When this Activity isn't visible anymore 
@Override 
protected void onStop() 
{ 
    //unregister the sensor listener 
    sManager.unregisterListener(this); 
    super.onStop(); 
} 

@Override 
public void onAccuracyChanged(Sensor arg0, int arg1) 
{ 
    //Do nothing 
} 

@Override 
public void onSensorChanged(SensorEvent event) 
{ 
    //if sensor is unreliable, return void 
    if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE) 
    { 
     return; 
    } 

    //else it will output the Roll, Pitch and Yawn values 
    tv.setText("Orientation Z (Yaw) :"+ Float.toString(event.values[0])); 
} 
} 

ответ

0

Датчик TYPE_ORIENTATION является устаревшим, не использовать его, потому что он не работает хорошо и с интенсивными вычислениями.

Используйте [getRotationMatrix] [1], проходящие в октерометрическом и магнитном поле, а затем используйте getRotation() на матрице. Это почти дословно из ссылки разработчиков:

[1]: http://developer.android.com/reference/android/hardware/SensorManager.html#getRotationMatrix(float[], поплавок [], поплавок [], поплавок []) "getRotationMatrix ( )"

+0

Спасибо, что нашли время, чтобы ответить. Я довольно новичок в использовании сенсоров в Android, поэтому, если бы вы дали мне образец кода, который бы направил меня в правильном направлении, это меня разобрало! Благодаря! –

0

Простейшее решений иногда может быть трудно найти ,

Я добавил 3 кнопки: 1, чтобы поймать исходное положение, 1, чтобы поймать конечное положение, и один, чтобы вычесть оба.

 Смежные вопросы

  • Нет связанных вопросов^_^