2012-06-28 2 views
5

Мне нужно, чтобы обнаружить андроид изменения ориентации устройства без воспроизведения вручную с помощью сенсорных данных, сохраняя при этом ориентации деятельности придерживаться некоторой ориентацииОпределения ориентации устройства

onConfigurationChange не будет работать, как вставит свою деятельность, чтобы не вращаться.

Игра вокруг с данными датчиков, чтобы обнаружить изменение ориентации я считаю, что как изобретение колеса, так как Android уже имеет встроенную реализацию алгоритма для обнаружения изменения ориентации устройства. И с другой стороны обнаружение изменения ориентации не является простым проверкой, подобным этому.

public void onSensorChanged(SensorEvent event) { 
     if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3) { 
      return; 
     } 
     //getResources().getConfiguration().orientation; 
     if (event.values[1] < 6.5 && event.values[1] > -6.5) { 
      if (orientation!=1) { 
       Log.d("Sensor", "Protrait"); 
      } 
      orientation=1; 
     } else { 
      if (orientation!=0) { 
       Log.d("Sensor", "Landscape"); 
      } 
      orientation=0; 
     } 
    } 

Это действительно требует обработки реальных данных, таких как фильтрация от шума и внезапных коротких вибраций/поворотов.

Поэтому любые идеи, как ориентация устройства может быть обнаружена с помощью традиционных услуг? (Еще раз, я буду придерживаться своей деятельности до некоторой ориентации, так что onConfigurationChange не будет работать)

+0

это не то, что вы хотели ??? http://stackoverflow.com/questions/2795833/check-orientation-on-android-phone –

+0

нет, я не имею каких-либо ресурсов, чтобы изменить – deimus

ответ

8

Существует прослушиватель для Ориентации-события.

Check the document here.

SO question mentioning implementation of that Listener.

Code Example for the same here in this blog

Я надеюсь, что это поможет вам

+0

Спасибо человек вот именно то, что мне нужно !!! уважение !!! Я новый андроид, но, кажется, много Android-разработчики не знают об этом, даже здесь, в StackOverflow – deimus

+0

Вы приветствуете Deimus, Никто не совершен, каждый из них имеет свой собственный домен экспертизы, я только начал использовать SO для последнего 3- 5 дней :) с Днем coading – rajpara

5

Моя активность устанавливается, чтобы всегда быть в портретном режиме. Поместите этот код в Create.

myOrientationEventListener = new OrientationEventListener(this,SensorManager.SENSOR_DELAY_NORMAL) { 
     public void onOrientationChanged(int arg0) { 
      if (arg0>=315 || arg0<45){ 
       currentOrientation = Surface.ROTATION_90; 
      }else if (arg0>=45 && arg0<135){ 
       currentOrientation = Surface.ROTATION_180; 
      }else if (arg0>=135 && arg0<225){ 
       currentOrientation = Surface.ROTATION_270; 
      }else if (arg0>=225 && arg0<315){ 
       currentOrientation = Surface.ROTATION_0; 
      } 
     } 
    }; 
+0

Это помогло мне много. Когда активность заблокирована для ориентации, но вам по-прежнему нужно получить позицию устройства, это правильный путь :) – Tooroop

5

Установив screenOrientation свойства в манифесте вы не сможете получить значение ориентации от onConfigurationChanged больше, как это было бы остановить стрельбу, это можно реализовать SensorEventListener получить Pitch, roll и yaw углов, чтобы вычислить ориентацию, но это немного сложно и слишком сложно для такой задачи. Лучшее решение я нашел это использовать OrientationEventListener, следующий код будет обновлять значение поворота на изменение ориентации, значение от 0 до 4 в зависимости от угла поворота:

private OrientationEventListener listener; 
private int rotation; 

@Override 
protected void onCreate (Bundle savedInstanceState) 
{ 
    super.onCreate (savedInstanceState); 
    setContentView (R.layout.main); 

    listener = new OrientationEventListener (this, SensorManager.SENSOR_DELAY_NORMAL) 
    { 
     @Override 
     public void onOrientationChanged (int orientation) 
     { 
      rotation = ((orientation + 45)/90) % 4; 
     } 
    }; 

    if (myOrientationEventListener.canDetectOrientation()) listener.enable(); 
    else listener = null; // Orientation detection not supported 
} 

@Override 
protected void onDestroy() 
{ 
    super.onDestroy(); 
    if (listener != null) listener.disable(); 
} 

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

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