0

接続している現在のセルの信号強度を取得しようとしています。これまでのところ、次の例を見つけました。

http://www.android10.org/index.php/forums/44-maplocation/868-tutorialget-gsm-signal

しかし、それは信号が変更されたときにトーストを取得するためだけです。信号強度の値を変数に保存する方法はありますか?

変数に値を保存して取得することで、次のコードでこれを試しましたが、「初期値」を取得し続けます。コードは次のとおりです。

package org.mode.gsm;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.widget.TextView;
import android.widget.Toast;

public class GetGsmSignalStrength extends Activity {

    TelephonyManager Tel;
    MyPhoneStateListener MyListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView abcd = new TextView(this);
        abcd.setText(getRSSI());
        setContentView(abcd);
    }

    public String getRSSI() {
        MyListener = new MyPhoneStateListener();
        Context context = (Context) getApplicationContext();
        Tel = (TelephonyManager) context
                .getSystemService(Context.TELEPHONY_SERVICE);
        Tel.listen(MyListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
        String GSMCinr = "GSM CINR = " + MyListener.getCinr();
        return GSMCinr;
    }

    private class MyPhoneStateListener extends PhoneStateListener {

        String cinr = "initial value";

        @Override
        public void onSignalStrengthsChanged(SignalStrength signalStrength) {
            super.onSignalStrengthsChanged(signalStrength);
            cinr = String.valueOf(signalStrength.getGsmSignalStrength());
            Toast.makeText(
                    getApplicationContext(),
                    "GSM Cinr = "
                            + String.valueOf(signalStrength
                                .getGsmSignalStrength()), Toast.LENGTH_LONG)
                    .show();
        }

        public String getCinr() {
            return cinr;
        }
    }
}

そしてマニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.mode.gsm"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="7" />

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".GetGsmSignalStrength" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
         </activity>
    </application>

</manifest>

誰かが信号強度の値を保存するのを手伝ってくれたり、それを行う他の方法を提案したりしてくれれば本当に感謝しています...

ありがとう

4

1 に答える 1

1
GetRssi listener = new GetRssi();
protected int Rssi;
Rssi = 99;

private class GetRssi extends PhoneStateListener 
{
    @Override  
    public void onSignalStrengthsChanged(SignalStrength signalStrength)
    {
         super.onSignalStrengthsChanged(signalStrength);
         Rssi  = signalStrength.getGsmSignalStrength();
    }
    }

Rssiは整数で宣言されました。したがって、 "" + Rssiを返す関数(文字列)を作成した後、

public String getRssi(){
        return ""+Rssi;
}

値をdBmで変換する必要があります。それがお役に立てば幸いです!!!

于 2012-04-20T14:33:01.620 に答える