#はじめに
ネットワークの接続状況を監視したり、電池残量や温度、充電状態を監視するのは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
}
}
#おわりに
クイズハッカーってバラエティ番組みたいな感じで「検索力」を上げていきたい。