1

現在の信号強度を保存するアプリを作成しようとしています。これまで、すべて PhoneStateListener を拡張している多くの例を見てきましたが、それらはすべて、次の例のように Toast を使用してこの情報を表示します。

http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/

私はいくつかのことを考えていました:

a) 常に PhoneStateListener を使用し、onSignalStrengthsChanged(SignalStrength signalStrength) をオーバーライドする必要がありますか?

b) PhoneStateListener クラスの外から値 signalStrength.getGsmSignalStrength() にアクセスするにはどうすればよいですか?

前もって感謝します

4

2 に答える 2

0

あなたの質問に答えるのが遅くなるかもしれませんが、あなたがまだ答えを探しているなら、ここにあります:

a) はい、PhoneStateListener を使用して onSignalStrengthsChanged を上書きする必要があります。私の知る限り、これが GSM の現在のセルの信号強度を取得する唯一の方法です。リスナーは大きな信号強度の変化でのみ呼び出されるため、自分でリスナーを制御することはできません。リスナーは、呼び出されると自動的に更新またはトーストを作成します。そのため、リスナーを宣言して、onCreate() でリッスンするように依頼することをお勧めします。

b) リスナーの外部から RSSI 値にアクセスするのはそれほど難しくありません。値を変数に格納し、呼び出されたときに値を返す getRSSI() などのメソッドを作成するだけです。以下に例を示します。

    public class GsmRSSI extends Activity{
    MyPhoneStateListener MyListener;
    TelephonyManager Tel;
    ArrayList<String> signalStrength = new ArrayList<String>();

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyListener = new MyPhoneStateListener();
    Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);

    timer.schedule(new TimerTask() {
        public void run() {
            String rssi = MyListener.getStrength();
                            if(!rssi.equals(""))
                               signalStrength.add(rssi);
        }
    }, 0, 5000);//it will add the rssi value after every 5000ms
    }


       private class MyPhoneStateListener extends PhoneStateListener {
    String gsmStrength = "";

    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        super.onSignalStrengthsChanged(signalStrength);
        gsmStrength = String.valueOf(signalStrength.getGsmSignalStrength()* 2 - 113);           
    }

    public String getStrength() {
        return gsmStrength;
    }

    }
    }

これでうまくいくはずです。ただし、rssi に大きな変化があった場合にのみリスナーが呼び出されるため、最初はしばらくの間 rssi 値を取得できない場合があります。

于 2013-08-02T17:15:45.223 に答える
0

あなたはそれを試すことができます。それが最終的な解決策とは言えません。他のアクティビティから特定のデータにアクセスしたい場合は、共有設定で試してください。共有設定値は他のアクティビティから表示されます

于 2012-03-02T19:10:35.990 に答える