현재 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();
}
이 유튜브 기능과 유사한 일이 도움이되기를 바랍니다 :
다음은 데모 코드입니다.
내 응용 프로그램이 기본적으로 세로 모드입니다. 사용자는 버튼을 클릭하거나 장치를 기울여 가로 모드로 전환 할 수 있습니다. 그러나 가로 모드에서는 액티비티를 세로 모드로 되돌릴 수 없습니다. 방향을 강제로 세로로 설정하기 위해 다른 버튼을 제공해야하는 경우 이것이 마지막 옵션입니다. 프리젠 테이션을 강제 한 후에 센서 모드로 설정할 수 있는지 알고 싶었습니다. 일시 중지시 센서 모드로 설정하려고했지만 가로 모드로 전환하려면 세로 모드로 전환해야합니다. – Kulai