2012-03-02 65 views
1

我试图创建一个可以保存当前信号强度的应用程序。到目前为止,我已经看到了都延长PhoneStateListener的例子很多,但它们都使用吐司在这个例子中显示此信息,如:将android上的信号强度保存为变量

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

我想知道几件事情:

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

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

在此先感谢

回答

0

U可以用它试试。我不能说它的最终解决方案。如果你想访问其他活动的某些数据,然后尝试与共享首选项。共享首选项值可见其他活动

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