Signal Strengthの取得方法

Posted by Kami on 2009/12月/11

アンテナ表示のもとになる信号強度の取得方法が,日本語サイトであまり紹介されてなかったので載せてみます.

まず,以下を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

で換算できるようです.

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">