2009-12-27 91 views
20

我想写一个非常简单的Android应用程序,检查当前单元格的信号强度。到目前为止,我只找到一种叫做getNeighboringCellInfo()的东西,但我不确定那是否包含当前单元格。如何在Android中获取细胞服务信号强度?

如何获得Android中的CURRENT单元信号强度?

getNeighborCellInfo()是否获取当前单元格?它似乎不是基于我已经能够得到的结果。这里是我当前的代码:

List<NeighboringCellInfo> n = tm.getNeighboringCellInfo(); 

//Construct the string 
String s = ""; 
int rss = 0; 
int cid = 0; 
for (NeighboringCellInfo nci : n) 
{ 
    cid = nci.getCid(); 
    rss = -113 + 2*nci.getRssi(); 
    s += "Cell ID: " + Integer.toString(cid) + "  Signal Power (dBm): " + 
      Integer.toString(rss) + "\n"; 
} 

mainText.setText(s); 
+0

不错的d容易[教程](http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/) – mjosh 2013-05-26 19:41:31

回答

19

创建PhoneStateListener和处理onSignalStrengthChanged回调。当你的应用程序初始化时,它应该给你一个初始通知。这是1.x.在2.x中,这里有一个开放的issue

+0

这是否工作在3.x和4.x? – Supuhstar 2014-03-18 02:11:45

+0

4.x - 8.x的任何解决方案? – gtzinos 2017-09-04 19:31:35

13

此代码可以帮助:

PhoneStateListener phoneStateListener = new PhoneStateListener() { 
public void onCallForwardingIndicatorChanged(boolean cfi) {} 
public void onCallStateChanged(int state, String incomingNumber) {} 
public void onCellLocationChanged(CellLocation location) {} 
public void onDataActivity(int direction) {} 
public void onDataConnectionStateChanged(int state) {} 
public void onMessageWaitingIndicatorChanged(boolean mwi) {} 
public void onServiceStateChanged(ServiceState serviceState) {} 
public void onSignalStrengthChanged(int asu) {} 
}; 

一旦你创建了自己的电话状态侦听器,使用位掩码来指示要监听的事件与电话管理器注册,如图所示下面的代码片段:

TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE); 

telephonyManager.listen(phoneStateListener, 
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR | 
PhoneStateListener.LISTEN_CALL_STATE | 
PhoneStateListener.LISTEN_CELL_LOCATION | 
PhoneStateListener.LISTEN_DATA_ACTIVITY | 
PhoneStateListener.LISTEN_DATA_CONNECTION_STATE | 
PhoneStateListener.LISTEN_MESSAGE_WAITING_INDICATOR | 
PhoneStateListener.LISTEN_SERVICE_STATE | 
PhoneStateListener.LISTEN_SIGNAL_STRENGTH); 

此外,需要将这些添加到AndroidManifest.xml中:

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