Help us understand the problem. What is going on with this article?

[Android]台風に備えて気圧を測れるアプリを作る

こんにちは。中間テスト終わりました。
今回はやばい台風が来るそうなので気圧が測れるアプリを作りたいと思います。

スマホにはいろんなセンサーがついている

せっかくなので使いましょう。
というのは建前で本当は この記事 でやってることAndroidでも作れるのではと思ったのが本当の理由。

紹介

端末 Pixel 3 XL
Android バージョン Android 10
最低バージョン ろりぽっぷ
言語 Kotlin

実装

レイアウト

真ん中にTextViewを置いただけのものとする。
面倒なのでConstraintLayoutをそのまま使うことにする。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="50dp"
        android:id="@+id/barometer_tv"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

コード

Sensor.TYPE_PRESSUREが気圧計になります。
onDestroy()で登録を解除しています。
受け取るセンサーがほかにもあるときはevent?.sensor?.typeを利用して分けましょう。

MainActivity.kt
    lateinit var sensorManager: SensorManager
    lateinit var sensorEventListener: SensorEventListener
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
        //今回は気圧計
        val sensorList = sensorManager.getSensorList(Sensor.TYPE_PRESSURE)
        //受け取る
        sensorEventListener = object : SensorEventListener {
            override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {
                //つかわん
            }

            override fun onSensorChanged(event: SensorEvent?) {
                //値はここで受けとる
                //今回は気圧計のみだからいいけどほかにも登録するときは分岐してね
                if(event?.sensor?.type == Sensor.TYPE_PRESSURE){
                    //気圧計の値
                    val barometer = event.values[0]
                    //TextViewに設定
                    barometer_tv.text = "$barometer hPa"
                }
            }
        }
        //登録
        sensorManager.registerListener(
            sensorEventListener,
            sensorList[0],  //配列のいっこめ。気圧計
            SensorManager.SENSOR_DELAY_NORMAL  //更新頻度
         )
    }

    override fun onDestroy() {
        super.onDestroy()
        sensorManager.unregisterListener(sensorEventListener)
    }

これでTextViewに気圧が表示されてると思います。

Screenshot_20191011-112836.png

小数点を消す

roundToInt() できれいになります。

                //値はここで受けとる
                //今回は気圧計のみだからいいけどほかにも登録するときは分岐してね
                if(event?.sensor?.type == Sensor.TYPE_PRESSURE){
                    //気圧計の値
                    val barometer = event.values[0]
                    //整数に
                    val barometerInt = barometer.roundToInt()
                    //TextViewに設定
                    barometer_tv.text = "$barometerInt hPa\n($barometer hPa)"
                }

Screenshot_20191011-113656.png

以上です。
お疲れ様です。88888

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away