폴더블 기기의 경우 화면 회전 동작을 기기의 물리적 상태에 맞게 조정하여 사용자 환경을 최적화할 수 있습니다. 예를 들어 기기가 태블릿과 같은 자세로 펼쳐져 있을 때는 화면이 자동으로 회전하도록 설정하고 기기가 접혀 있을 때는 세로 모드로 잠기도록 설정할 수 있습니다.
Android 13부터 Android는 접힘, 펼침, 절반 접힘 (테이블 모드)과 같은 기기 상태에 따라 자동 회전 설정을 맞춤설정할 수 있습니다.
그림 1: 사용자에게 표시되는 기기 상태 기반 자동 회전 설정
기기 상태 기반 자동 회전 설정 사용 설정
기기 상태 기반 자동 회전을 사용 설정하고 구성하려면 다음과 같이 프레임워크의 config.xml 파일용 기기 오버레이를 만드세요.
기기 오버레이
config.xml에서config_perDeviceStateRotationLockDefaults정수 배열을 채워 다양한 기기 자세에 대한 기본 자동 회전 동작을 구성합니다.<!-- In your device overlay, for example, device/generic/goldfish/phone/overlay/frameworks/base/core/res/res/values/config.xml --> <resources> <!-- Map of device posture to rotation lock setting. Each entry must be in the format "key:value", or "key:value:fallback_key" for example: "0:1" or "2:0:1". The keys are one of Settings.Secure.DeviceStateRotationLockKey, and the values are one of Settings.Secure.DeviceStateRotationLockSetting. --> <integer-array name="config_perDeviceStateRotationLockDefaults"> <item>0:1</item> <!-- CLOSED -> LOCKED --> <item>1:0:2</item> <!-- HALF_OPENED -> IGNORED and fallback to device posture OPENED --> <item>2:2</item> <!-- OPENED -> UNLOCKED --> <item>3:0:0</item> <!-- REAR_DISPLAY -> IGNORED and fallback to device posture CLOSED --> </integer-array> </resources>fallback-key는 다른 기기 상태에 대한 참조이며 상태 값이Settings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNORED인 경우 지정해야 합니다. 자세가 이 방식으로 구성되면 자동 회전 환경설정을 가져오거나 설정하는 요청이 대체 자세로 리디렉션됩니다.예를 들어
HALF_OPENED자세가OPENED자세로 대체되는 경우:HALF_OPENED의 자동 회전 설정을 읽으면OPENED의 현재 설정이 반환됩니다.- 기기가
HALF_OPENED업데이트되는 동안 새 자동 회전 환경설정을 작성하면OPENED자세의 환경설정이 업데이트됩니다.
사용자가 설정할 수 있는 각 기기 자세의 설명을 구성합니다. 기기의 설정 앱 오버레이에서
config_settableAutoRotationDeviceStatesDescriptions문자열 배열을 채웁니다.<!-- In your device's Settings app overlay --> <resources> <!-- The settings/preference description for each settable device posture defined in the array "config_perDeviceStateRotationLockDefaults". The item in position "i" describes the auto-rotation setting for the device posture also in position "i" in the array "config_perDeviceStateRotationLockDefaults". --> <string-array name="config_settableAutoRotationDeviceStatesDescriptions"> <item>Auto-rotate when folded</item> <item>@null</item> <!-- No description for state in position 1 (it is not settable by the user) --> <item>Auto-rotate when unfolded</item> </string-array> </resources>일관되지 않은 동작을 방지하려면 설정 제공자에 직접 쓰는 대신 올바른 API를 사용하여 이러한 설정을 프로그래매틱 방식으로 수정해야 합니다.
현재 회전 잠금 상태를 변경하려면 (
ACCELEROMETER_ROTATION수정) 다음을 실행하세요.- SystemUI 또는 런처에서
RotationPolicy#setRotationLock(...)를 사용합니다. - 창 관리자에서
DisplayRotation#freezeRotation()또는thawRotation()를 사용합니다.
- SystemUI 또는 런처에서
특정 기기 상태의 회전 잠금 환경설정을 변경하려면(
DEVICE_STATE_ROTATION_LOCK수정) 다음을 실행하세요.RotationPolicy또는DeviceStateAutoRotateSettingManager에서requestDeviceStateAutoRotateSettingChange(...)를 사용합니다.
구현 세부정보
폴더블 기기의 자동 회전 동작을 제어하는 설정과 핵심 키 클래스는 다음 섹션에 설명되어 있습니다.
설정
시스템은 다음 두 설정을 사용하여 자동 회전을 관리합니다.
Settings.System.ACCELEROMETER_ROTATION: 기본 자동 회전 설정입니다. 폴더블 기기의 경우 이 값은 기기의 현재 기기 자세에 자동 회전이 사용 설정되어 있는지 여부를 반영합니다.Settings.Secure.DEVICE_STATE_ROTATION_LOCK: 이 설정은 각 기기 자세 (예: 접거나 펼침)에 대한 사용자의 자동 회전 환경설정을 저장합니다. 이를 통해 기기 자세가 변경될 때 시스템이 올바른 환경설정을 적용할 수 있습니다.이 설정은 콜론으로 구분된 문자열로 저장됩니다. 각 값 쌍은 기기 자세와 해당 회전 설정을 나타냅니다. 형식은 다음과 같습니다.
<device_posture_0>:<rotation_value_0>:<device_posture_1>:<rotation_value_1>...회전 값은 다음과 같습니다.
0: 무시됨 (대체 자세 설정이 사용됨)1: 잠김 (자동 회전 사용 중지됨)2: 잠금 해제됨 (자동 회전 사용 설정)
예를 들어
"0:2:2:1"문자열은 다음을 의미합니다.- 접힌 상태 (자세
0)의 경우 자동 회전이 잠금 해제 (2)됩니다. - 펼친 상태 (자세
2)에서는 자동 회전이 잠금 (1)됩니다.
주요 클래스
기기 상태 기반 자동 회전 설정을 관리하는 로직은 다음 클래스에서 처리합니다.
DeviceStateAutoRotateSettingManagerImpl:DEVICE_STATE_ROTATION_LOCK설정을 관리합니다. 설정을 업데이트하고, 값을 가져오고, 변경사항에 대한 리스너를 등록하는 메서드를 제공합니다.DeviceStateAutoRotateSettingController(창 관리자):ACCELEROMETER_ROTATION및DEVICE_STATE_ROTATION_LOCK를 동기화합니다. 기기 자세가 변경되면 새 상태에 대한 사용자의 환경설정에 따라ACCELEROMETER_ROTATION가 업데이트됩니다. 이를 통해ACCELEROMETER_ROTATION의 변경사항이 현재 기기 자세에 대해DEVICE_STATE_ROTATION_LOCK에 다시 저장되고 현재 자세에 대한DEVICE_STATE_ROTATION_LOCK의 변경사항이ACCELEROMETER_ROTATION에 반영됩니다.DeviceStateAutoRotateSettingController(설정 앱): 기기 상태 기반 자동 회전 설정 페이지에서 UI를 제어합니다.PostureDeviceStateConverter: 일반 기기 상태 식별자와 이 기능에서 사용하는 기기 자세 식별자 간에 변환합니다.
유효성 검사
이 기능의 동작은 OEM의 구성에 크게 의존하므로 특정 CTS 테스트는 없습니다. 기기가 구성한 여러 실제 상태 간에 전환될 때 자동 회전 설정이 예상대로 변경되는지 확인하려면 수동 테스트를 실행해야 합니다.