在笔记本电脑式可折叠设备上,您可以启用对支架模式和楔形模式的支持。
在立架模式和楔形模式下,您可以在设备略微打开时使用外屏,如下图所示:
图 1. 帐篷和楔形可折叠设备状态。
在影音模式下,设备处于半开状态,使用两个半屏像帐篷一样支撑自身。在楔形模式下,设备靠右半部分支撑,右半部分平放在表面上。
Android 16 及更高版本支持此行为,方法是使用 BookStyleDeviceStatePolicy
作为设备状态政策。此政策适用于采用图书样式的双屏可折叠设备,当设备折叠时,铰链位于设备左侧。
此政策可在某些条件下(例如)延长展开时的外屏开启时间:
- 设备的右半部分基本平坦,表明设备可能处于楔形模式。
- 设备方向为反向横向,表明设备可能处于帐篷模式。
- 屏幕方向为横向或反向横向。
- 有应用持有屏幕唤醒锁(防止屏幕超时)。
此政策不会为支架模式或楔形模式引入单独的设备状态;在这些特定条件下,它会针对更广泛的铰链角度保持关闭状态。
为了完全支持这些启发式方法,设备需要:
- 铰链角度传感器,用于报告设备两个半部之间的角度
- 设备左右两侧的加速度计传感器
配置竖立模式或楔形模式
请按以下步骤在设备上启用竖立模式和楔形模式支持:
创建
DeviceStatePolicy.Provider
的实现,该实现返回BookStyleDeviceStatePolicy
的实例。该实例必须向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>