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) 从 Listener 外部访问 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 回答