【问题标题】:Signal Strength on android saved as a variableandroid上的信号强度保存为变量
【发布时间】:2012-03-02 17:50:47
【问题描述】:

我正在尝试创建一个可以保存当前信号强度的应用。到目前为止,我已经看到了许多扩展 PhoneStateListener 的示例,但它们都使用 Toast 来显示此信息,如下例所示:

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

我想知道一些事情:

a) 我是否总是必须使用 PhoneStateListener 并覆盖 onSignalStrengthsChanged(SignalStrength signalStrength) ?

b) 如何从 PhoneStateListener 类外部访问值 signalStrength.getGsmSignalStrength()?

提前致谢

【问题讨论】:

    标签: android signal-strength


    【解决方案1】:

    你可以试试。我不能说它是最终的解决方案。如果你想从其他活动中访问某些数据,那么尝试使用共享偏好。共享偏好值在其他活动中是可见的

    【讨论】:

      【解决方案2】:

      我可能会迟到回答你的问题,但如果你还在寻找答案,这里是:

      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 发生显着变化时才会调用侦听器。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-02
        • 2011-05-12
        • 2016-06-27
        • 1970-01-01
        • 2012-03-21
        • 2014-07-26
        • 1970-01-01
        • 2012-03-09
        相关资源
        最近更新 更多