LoginSignup
3

More than 3 years have passed since last update.

Android端末の信号強度を監視してみた

Last updated at Posted at 2019-07-26

はじめに

ネットワークの接続状況を監視したり、電池残量や温度、充電状態を監視するのはBroadcastReceiverを使えばできることは調べたらすぐヒットしたのですが、今回のタイトルにもあるように、信号強度を監視する方法はなかなか見つけることができなかったので、メモしておきます。

Permissionを設定する

端末の情報にアクセスするために、Manifestに下記を追加します。

AndroidManifest.xml
<manifest ...>
    ...
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    ...
</manifest>

Listenerを登録する

今回は信号強度の監視したいので、イベントには PhoneStateListener.LISTEN_SIGNAL_STRENGTHS を指定します。Listenerは後ほど実装します。

val tm = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
tm.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)

Listenerを実装する

PhoneStateListenerクラスを親クラスとして、オブジェクト式で記述してます。
SignalStrength#getLevel はAPIレベル23からなので、注意してください。

val phoneStateListener = object : PhoneStateListener() {
    override fun onSignalStrengthsChanged(signalStrength: SignalStrength?) {
        super.onSignalStrengthsChanged(signalStrength)
        val level = signalStrength.level
        println("level: $level") // => [level: 4] などと出力される
        // 例)LiveDataなどで変更を通知するのが実用的かと思います。
        liveDataSignalLevel.value = level
    }
}

おわりに

クイズハッカーってバラエティ番組みたいな感じで「検索力」を上げていきたい。

参考

PhoneStateListener
SignalStrength

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3