轉軸角度感應器 API
轉軸角度是介於 0 到 360 之間的值:
- 0 - 裝置已關閉 (螢幕彼此面向且不可見)
- 90 - 裝置是「L」圖形,亦稱為「膝上型電腦狀態」或「書籍」狀態,視方向而定
- 180 - 裝置是平面的
- 360 - 摺疊裝置,讓螢幕彼此面對,而且只有一個螢幕在運作
提示
此程式碼範例是針對 Surface Duo 上的轉軸角度感應器所撰寫。
Jetpack 視窗管理員有一個 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
)
}
}