Android - SensorManager podivné chování getOrientation

hlasů
5

Musím získat orientaci telefonu. V tuto chvíli jsem napsal toto:

public void onSensorChanged(SensorEvent event) {
  switch (event.sensor.getType()){
  case Sensor.TYPE_MAGNETIC_FIELD:
    this.mag_vals = event.values.clone();
    this.sensorReady = true;
    break;
  case Sensor.TYPE_ACCELEROMETER:
    this.acc_vals = event.values.clone();
    break;
  }
  if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) {
    this.sensorReady = false;
    float[] R = new float[ProjectConstants.SIZE_MATRIX];
    float[] I = new float[ProjectConstants.SIZE_MATRIX];
    SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals);

    SensorManager.getOrientation(R, this.actual_orientation);
    ...  

Tento kód mi umožňuje získat orientaci telefonu Nechá-li se telefon na rovný povrch a já ji otočit na povrchu.

To, co jsem nechápal, proč je-li i přesunout telefon vzhůru hodnotu this.actual_orientation[0], což je rotace na zed ose, jak je popsáno [zde] [1], se zvyšuje hodnota ačkoli tam byla žádná rotace.

Někdo vědět, co se stane?

UPRAVIT

Další zvláštní věc ..

Snažil jsem se mé žádosti v kanceláři při práci, a mělo to podivné chování jsem popsal předtím .. jsem se snažil ve stejné kanceláři (stejná situace) kompas aplikace, která jsem si vzal z trhu a má stejné chování mine..when jsem se přestěhoval telefon vzhůru hodnota změnila důsledně .. jsem se snažil ve stejné kanceláři (stejná situace) i-phone kompasu a neměla že podivné chování!

Pak, když jsem dorazil domů jsem se snažil obě mé žádosti a kompas app můj android telefon, a oni pracovali !! i když jsem pohybovat nahoru telefonu hodnoty jsou stabilní ...

Díky moc.

[1]: http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation (float [] , float [])

Položena 07/07/2010 v 15:43
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
4

Odhad orientace získaný zařízení závisí částečně na lokálním směru magnetického pole. V budovách, v blízkosti železných konstrukcí a okolí elektrických spotřebičů je magnetické pole snímané se může významně měnit v průběhu vzdálenosti měřené ve stopách. Tento efekt lze snadno vidět s ručně vedené magnetometru nebo Gauss-metru.

Domnívám se, že tyto deformace jsou zodpovědní za své aplikace podivné chování.

Odpovězeno 23/08/2010 v 22:02
zdroj uživatelem

hlasů
1

Když ji zvednout vám představit úhel natočení a to ovlivní vrácené hodnoty v getOrientation. Úhel natočení změřit množství rotace zařízení z normální polohy, tedy pro většinu zařízení, ve kterém normální poloha znamená na výšku a pak, pokud je telefon v orientaci na šířku, úhel natočení bude 90 nebo -90. Takže pokud chcete, aby správné čtení budete muset zavolat remapCoordinateSystem před volání getOrientation.

Odpovězeno 31/03/2012 v 01:01
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more