힌지 각도 센서 API
힌지 각도는 0에서 360 사이의 값입니다.
- 0 - 디바이스가 닫힘(화면이 서로 마주보고 보이지 않음)
- 90 - 디바이스가 "L"자 모양이며 방향에 따라 랩톱 상태 또는 책 상태라고도 함
- 180 - 디바이스가 평면이 됨
- 360 - 화면이 서로 반대쪽을 향하고 하나의 화면만 작동하도록 디바이스가 접힘
팁
이 코드 샘플은 Surface Duo의 힌지 각도 센서용으로 작성되었습니다.
Jetpack Window Manager에는 여러 제조업체의 디바이스에서 작동하는 포스처(예: 닫힘, 열림, 반 열림)에 대한 정보를 제공하는 DeviceState
API가 있습니다.
코드 예제
힌지 각도는 Hinge Angle
센서 이름으로 구성된 Android의 센서 관리자를 사용하여 측정할 수 있습니다.
private val HINGE_ANGLE_SENSOR_NAME = "Hinge Angle"
private var mSensorManager: SensorManager? = null
private var mHingeAngleSensor: Sensor? = null
private var mSensorListener: SensorEventListener? = null
// call setupSensors from onCreate
private fun setupSensors() {
mSensorManager = getSystemService(SENSOR_SERVICE) as SensorManager
val sensorList: List<Sensor> = mSensorManager!!.getSensorList(Sensor.TYPE_ALL)
for (sensor in sensorList) {
if (sensor.getName().contains(HINGE_ANGLE_SENSOR_NAME)) {
mHingeAngleSensor = sensor
}
}
mSensorListener = object : SensorEventListener {
override fun onSensorChanged(event: SensorEvent) {
if (event.sensor == mHingeAngleSensor) {
val angle = event.values[0].toInt()
//TODO something with angle
}
}
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
//TODO (if required)
}
}
}
override fun onPause() {
super.onPause()
if (mHingeAngleSensor != null) {
mSensorManager?.unregisterListener(mSensorListener, mHingeAngleSensor)
}
}
override fun onResume() {
super.onResume()
if (mHingeAngleSensor != null) {
mSensorManager?.registerListener(
mSensorListener,
mHingeAngleSensor,
SensorManager.SENSOR_DELAY_NORMAL
)
}
}