misc.

Signal Strengthの取得方法

アンテナ表示のもとになる信号強度の取得方法が,日本語サイトであまり紹介されてなかったので載せてみます. まず,以下をimport import android.content.Context; import android.telephony.PhoneStateListener; import android.telephony.TelephonyManager; PhoneStateListenerクラスには,信号強度が変化したときに実行されるためのメソッド(onSignalStrengthChanged)が用意されており,このメソッドを実装して継承したクラス(以下の例ではSignalStrengthListener)を定義する. public class SignalStrengthListener extends PhoneStateListener { ・・・ @Override public void onSignalStrengthChanged(int asu)?? ?{ this.asuTextView.append("\n\t"+this.c+":\t"+String.valueOf(asu)+"asu \t" + String.valueOf(-113+2*asu)+"dBm"); } } ※asuの値はメソッドが呼ばれたときの信号強度が格納されている.  上記は取得したasuなどの文字列をあるTextViewに表示している. そして,getSystemService()から取得したTelephonyManagerインスタンスにリスナ登録すればOK. SignalStrengthListener ps = new SignalStrengthListener(); TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); tm.listen(ps, PhoneStateListener.LISTEN_SIGNAL_STRENGTH); ちなみに,Androidの環境で取得できる受信信号強度の単位は「asu」となっている. どうしてdBmではないんだと調べてみたら,AndroidDeveloperサイトでの議論を発見. 無線屋さんだったら当たり前?なのかもしれないですが,GSMではasu,UMTSではdBmとそれぞれ違う単位が用いられているようです.dBmの値は, dBm = -113 + 2*asu で換算できるようです.

Categories: Android, misc. | Leave a comment