こちらの教本を参考に、アプリからスマホのセンサー情報一覧を取得してみました。
[作ればわかる!Androidプログラミング Kotlin対応 10の実践サンプルで学ぶAndroidアプリ開発入門]
#【環境】
Mac OS Catalina 10.15.7
Android Studio 4.0.1
Minimum API Level 20
#【やったこと】
SensorManagerのgetSensorList()メソッドを使って、センサー名の一覧を取得しています。
package com.example.maki.sensorget
import android.content.Context
import android.hardware.Sensor
import android.hardware.SensorManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import java.lang.StringBuilder
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val buffer = StringBuilder() //センサーの一覧情報を入れるための変数を宣言-①
val sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager//getSystemService()の戻り値はObject型なので、SensorManager型にキャスト
val sList : List<Sensor> = sensorManager.getSensorList(Sensor.TYPE_ALL)//getSensorList()の引数には取得たいセンサーの種類を指定-②
for(sensor:Sensor in sList){
buffer.append("${sensor.stringType},${sensor.name},${sensor.vendor}\n")//sensor.type→定数、sensor.stringType→センサー名 - ③
}
txt01.text = buffer.toString()//activity_main.xmlの中にtxt01というTextViewを追加しています。
}
}
##①StringとStringBuilder()の違い
以前書いた以下の記事に違いをまとめています。
タイトルの通り、今回は文字列を追加していくのでStrignBuilderを使っています。
【Android Studio】文字列を追加したいときはStringよりもStringBuilderのがいいよって話【Kotlin】
##②センサータイプの名前と定数一覧
センサータイプの名前と定数は以下で確認できます。
参考:Android デベロッパー - センサーの概要
##③sensor.typeとsensor.stringType
sensor.typeは定数値のため、②の表を使って数値と種類の対応を確認する必要があります。
しかし、API20からはstringTypeでセンサーの種類が文字列で取得できるようになっていますので、そちらの方が便利です。
どこまでのAPIのバージョンをサポートするかはGradle Scripts/build.gradle(Module:app)のminSdkVersionの値で設定できます。
値を変更後は画面右上のSync nowを押して変更を反映させてください。