북 스타일 폴더블 기기에서는 텐트 모드와 웨지 모드 지원을 사용 설정할 수 있습니다.
텐트 모드와 웨지 모드를 사용하면 다음 그림과 같이 기기가 약간 열려 있을 때 외부 화면을 사용할 수 있습니다.
그림 1. 텐트 및 웨지 폴더블 상태
텐트 모드에서는 기기가 부분적으로 열려 있으며, 두 절반을 모두 사용하여 텐트처럼 기기를 지지합니다. 웨지 모드에서는 기기가 표면에 평평하게 놓인 오른쪽 절반에 지지됩니다.
Android 16 이상에서는 BookStyleDeviceStatePolicy
을 기기 상태 정책으로 사용하여 이 동작을 지원합니다. 이 정책은 책 스타일의 화면이 두 개이고 접었을 때 기기의 왼쪽에 힌지가 있는 폴더블 기기에서 작동합니다.
이 정책은 다음과 같은 특정 조건에서 펼칠 때 외부 화면을 더 오래 켜진 상태로 유지합니다.
- 기기의 오른쪽 절반이 대부분 평평하여 기기가 웨지 모드일 가능성이 높습니다.
- 기기 방향이 가로 반전으로, 텐트 모드일 가능성이 높음을 나타냅니다.
- 화면 방향이 가로 모드 또는 반전된 가로 모드입니다.
- 화면 절전 모드를 방지하는 화면 절전 모드 해제 상태를 유지하는 앱이 있습니다.
이 정책은 텐트 또는 웨지 자세에 별도의 기기 상태를 도입하지 않습니다. 이러한 특정 조건에서 더 넓은 범위의 힌지 각도에 대해 닫힌 상태를 유지합니다.
이러한 휴리스틱을 완전히 지원하려면 기기에 다음이 필요합니다.
- 기기의 두 절반 사이의 각도를 보고하는 힌지 각 센서
- 기기의 각 절반 (왼쪽 및 오른쪽)에 있는 가속도계 센서
텐트 모드 또는 스탠드 모드 구성
다음 단계에 따라 기기에서 텐트 모드 및 웨지 모드 지원을 사용 설정하세요.
BookStyleDeviceStatePolicy
인스턴스를 반환하는DeviceStatePolicy.Provider
구현을 만듭니다. 인스턴스는 센서 객체와 같은 필요한 모든 종속 항목을BookStyleDeviceStatePolicy
생성자에 제공해야 합니다.다음 예는 구현을 보여줍니다.
package com.example; public class MyDevicePolicyProvider implements DeviceStatePolicy.Provider { @Override public DeviceStatePolicy instantiate(@NonNull Context context) { final SensorManager sensorManager = context.getSystemService(SensorManager.class); final Sensor hingeAngleSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE, /* wakeUp= */ true); final List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); final Sensor hallSensor = CollectionUtils.find(sensors, (sensor) -> Objects.equals(sensor.getStringType(), "com.example.hall_effect")); final Sensor rightAccelerometerSensor = CollectionUtils.find(sensors, (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 0")); final Sensor leftAccelerometerSensor = CollectionUtils.find(sensors, (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 1")); // You can pass a non-null value here to disable tent/wedge mode logic, // so the displays switch will always happen at the fixed hinge angle. // This might be useful, for example, when in a retail demo mode where // the hinge angle range of the device is limited. final Integer closeAngleDegrees = null; return new BookStyleDeviceStatePolicy(new FeatureFlagsImpl(), context, hingeAngleSensor, hallSensor, leftAccelerometerSensor, rightAccelerometerSensor, closeAngleDegrees); } }
정책 제공자를 시스템 서버의 클래스 경로에 추가합니다. 이전 단계에서 만든 기기 상태 정책 제공자 클래스로 라이브러리를 만들어 시작합니다.
다음 예시에서는 Soong
Android.bp
블루프린트 구성을 보여줍니다.java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }
그런 다음 이 라이브러리를 시스템 서버에 추가하려면 다음 줄을 추가하여 기기의 makefile을 수정합니다.
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-services
config.xml
파일에서config_deviceSpecificDeviceStatePolicyProvider
을 제공자의 클래스 이름으로 업데이트합니다. 예를 들면 다음과 같습니다.<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>