2011-01-19 10 views
9

Android 화면 방향 센서

설정
 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

잘 작동합니다. 이제 응용 프로그램이 센서를 따라 가도록하여 세로 방향으로 다시 기울이면 방향이 세로 방향으로 되돌아 가도록합니다. 나는 이것이 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);을 설정함으로써 가능하다는 것을 알고 있지만 그것을 어디에 설정해야할지 모른다. 방향을 강제로 가로 방향으로 지정하면 방향에 상관없이 방향이 가로 방향으로 유지됩니다. 누구든지 방향 플래그를 재설정하는 방법을 지정할 수 있습니까?

답변

1

센서가 회전을 다시 감지하게 할시기에 따라 다릅니다. 개인적으로 나는 내가 세로 모드에있을 필요가 하나 개의 특정 활동을, 그래서 내가 onPause()에서이 활동의 ​​onResume()setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);를 사용하고 잘 작동 핵 물질 해요 응용 프로그램에서

, 나는를 입력 액티비티가 세로로 설정되어 있고 변경이 불가능한 상태에서 센서가 다시 작동하면 ...

센서를 활성화하고 비활성화하려는 위치는 어디입니까?

+0

내 응용 프로그램이 기본적으로 세로 모드입니다. 사용자는 버튼을 클릭하거나 장치를 기울여 가로 모드로 전환 할 수 있습니다. 그러나 가로 모드에서는 액티비티를 세로 모드로 되돌릴 수 없습니다. 방향을 강제로 세로로 설정하기 위해 다른 버튼을 제공해야하는 경우 이것이 마지막 옵션입니다. 프리젠 테이션을 강제 한 후에 센서 모드로 설정할 수 있는지 알고 싶었습니다. 일시 중지시 센서 모드로 설정하려고했지만 가로 모드로 전환하려면 세로 모드로 전환해야합니다. – Kulai

4

난 당신이 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)

7

현재 YouTube 앱은 당신이 무엇을 요구하지 사용해야 여기에 생각합니다.
비디오 재생을위한 내 응용 프로그램에서 같은 종류의 문제를 처리했습니다.

그/그녀가 세로에있을 때 장치가 주위 (orientation >= 60 && orientation <= 120) || (orientation >= 240 && orientation <= 300) 될 것이라고 가로 방향 범위에 기울어 경우, 풍경에 대한 사용자의 힘의 방향은 0에서 360

시계 범위 SensorManager에서 장치 방향에 당신을 통지 OrientationEventListener를 초기화하는 경우 이 상태를 열거 형 또는 플래그에 저장 한 다음 장치가 세로 방향 범위 (orientation <= 40 || orientation >= 320)로 돌아 가면 열거 형/플래그를 확인하고 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);을 호출하고 플래그/열거 형을 재설정하고 사용자 강제 방향이 다시 발생할 때까지 센서를 비활성화하십시오. ,

private enum SensorStateChangeActions { 
     WATCH_FOR_LANDSCAPE_CHANGES, SWITCH_FROM_LANDSCAPE_TO_STANDARD, WATCH_FOR_POTRAIT_CHANGES, SWITCH_FROM_POTRAIT_TO_STANDARD; 
} 

private SensorStateChangeActions mSensorStateChanges; 

public void goFullScreen() { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); 
     mSensorStateChanges = SensorStateChangeActions.WATCH_FOR_LANDSCAPE_CHANGES; 
     if (null == sensorEvent) 
      initialiseSensor(true); 
     else 
      sensorEvent.enable(); 
} 

public void shrinkToPotraitMode() { 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     mSensorStateChanges = SensorStateChangeActions.WATCH_FOR_POTRAIT_CHANGES; 
     if (null == sensorEvent) 
      initialiseSensor(true); 
     else 
      sensorEvent.enable(); 
} 
/** 
* Initialises system sensor to detect device orientation for player changes. 
* Don't enable sensor until playback starts on player 
* 
* @param enable if set, sensor will be enabled. 
*/ 
private void initialiseSensor(boolean enable) { 
    sensorEvent = new OrientationEventListener(this, 
      SensorManager.SENSOR_DELAY_NORMAL) { 

     @Override 
     public void onOrientationChanged(int orientation) { 
      /* 
      * This logic is useful when user explicitly changes orientation using player controls, in which case orientation changes gives no callbacks. 
      * we use sensor angle to anticipate orientation and make changes accordingly. 
      */ 
      if (null != mSensorStateChanges 
        && mSensorStateChanges == SensorStateChangeActions.WATCH_FOR_LANDSCAPE_CHANGES 
        && ((orientation >= 60 && orientation <= 120) || (orientation >= 240 && orientation <= 300))) { 
       mSensorStateChanges = SensorStateChangeActions.SWITCH_FROM_LANDSCAPE_TO_STANDARD; 
      } else if (null != mSensorStateChanges 
        && mSensorStateChanges == SensorStateChangeActions.SWITCH_FROM_LANDSCAPE_TO_STANDARD 
        && (orientation <= 40 || orientation >= 320)) { 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
       mSensorStateChanges = null; 
       sensorEvent.disable(); 
      } else if (null != mSensorStateChanges 
        && mSensorStateChanges == SensorStateChangeActions.WATCH_FOR_POTRAIT_CHANGES 
        && ((orientation >= 300 && orientation <= 359) || (orientation >= 0 && orientation <= 45))) { 
       mSensorStateChanges = SensorStateChangeActions.SWITCH_FROM_POTRAIT_TO_STANDARD; 
      } else if (null != mSensorStateChanges 
        && mSensorStateChanges == SensorStateChangeActions.SWITCH_FROM_POTRAIT_TO_STANDARD 
        && ((orientation <= 300 && orientation >= 240) || (orientation <= 130 && orientation >= 60))) { 
       setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
       mSensorStateChanges = null; 
       sensorEvent.disable(); 
      } 
     } 
    }; 
    if (enable) 
     sensorEvent.enable(); 
} 

이 유튜브 기능과 유사한 일이 도움이되기를 바랍니다 :

다음은 데모 코드입니다.

+0

정확히 내가 원했던 것 : YouTube 앱이하는 일을 에뮬레이트하는 방법! 감사합니다 :) – wblaschko

+0

완벽하게 작동 :) – Meenaxi