はじめに
- Android11の新しい機能でフォルダブル端末のヒンジ角度のセンサに対応できる様になった、という話があります。
- これまで、エミュレータなどで折りたたみの角度などを変更することはできましたが、センサの値を実際にアプリ側で取得することはできませんでした。
- そんな中、Android11 beta2が2020/7/9(日本時間)にリリースされましたが、早速試してみたところ、無事センサの値がとれましたので、情報を共有します。
動作環境
- Android Studio 4.2 Canary3 (AS4.0でも影響はないと思われる)
- Android SDK Platform 30 (API Level 30, Revision 2)
- Android 11 beta2イメージ(API Level 30, Revision 6)
- Android Emulator(30.0.20)
- フォルダブルのAVD(7.3_Foldable_API_30, beta2更新前に作成したものでもOK)
事前準備
- 上記のツール類をSDK Managerなどを使って取得する。
- こちらの記事の設定の通り、AVDに設定してください。
Basic Activityで適当実装
こんな感じでBasic Activityのテンプレートにコードを加えてみました。とりあえず、FABをタップしたらセンサ取得開始するイメージ。
class MainActivity : AppCompatActivity(), SensorEventListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(findViewById(R.id.toolbar))
findViewById<FloatingActionButton>(R.id.fab).setOnClickListener { view ->
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
val sensors = sensorManager.getSensorList(Sensor.TYPE_ALL)
Log.d("SENSOR_TEST", sensors.toString())
val hingeSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
sensorManager.registerListener(this,hingeSensor,SensorManager.SENSOR_DELAY_NORMAL)
}
}
//...略
override fun onAccuracyChanged(p0: Sensor?, p1: Int) {
}
override fun onSensorChanged(p0: SensorEvent?) {
if (p0!!.sensor.type == Sensor.TYPE_HINGE_ANGLE) {
Log.d("HINGE_TEST", "value: ${p0.values[0]}")
}
}
}
センサの一覧(ログを一部加工しています)
2020-07-09 hh:mm:ss.ms 11654-11654/com.example.etctaro.myhingeexample D/SENSOR_TEST: [{Sensor name="Goldfish 3-axis Accelerometer", vendor="The Android Open Source Project", version=1, type=1, maxRange=39.299976, resolution=2.480159E-4, power=3.0, minDelay=10000}, (略)
{Sensor name="Goldfish hinge sensor0 (in degrees)", vendor="The Android Open Source Project", version=1, type=36, maxRange=360.0, resolution=1.0, power=3.0, minDelay=10000},
{Sensor name="Goldfish hinge sensor1 (in degrees)", vendor="The Android Open Source Project", version=1, type=36, maxRange=360.0, resolution=1.0, power=3.0, minDelay=10000},(以下略)
ヒンジが二つある設定にしたので、センサも二つあるようです。(当然か)
センサの値(ログを一部加工しています)
こんな感じでFoldの設定をしました。
2020-07-09 hh:mm:ss.ms 11654-11654/com.example.etctaro.myhingeexample D/HINGE_TEST: value: 110.25
2020-07-09 hh:mm:ss.ms 11654-11654/com.example.etctaro.myhingeexample D/HINGE_TEST: value: 114.75
2020-07-09 hh:mm:ss.ms 11654-11654/com.example.etctaro.myhingeexample D/HINGE_TEST: value: 128.25
試してみたところ、スクリーンショットで言うHinge1ではこのログが出るのですが、Hinge2の方ではとくに反応しませんでした。
registerListenerの時のやり方が悪そうな気がしますが、ひとまずはここまでで。
getPostureもそのうち試してみようと思います。
※2020/7/11に補足の記事を追加しました。
まとめ
- Android11 beta2からヒンジ角度センサの情報が取ることができるようになりました。
- 複数ヒンジの場合は気にしなければならないことがあるかも(?)しれません。