如何在Android中获得手机信号强度?

Dou*_*ghy 22 android signals rssi

我正在尝试编写一个非常简单的Android应用程序来检查当前单元格的信号强度.到目前为止,我只找到了一些叫做的东西getNeighboringCellInfo(),但我不确定它是否包含当前的单元格.

如何在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);
Run Code Online (Sandbox Code Playgroud)

jsp*_*cal 19

创建一个PhoneStateListener并处理onSignalStrengthChanged回调.当您的应用初始化时,它应该给您初始通知.这是1.x. 在2.x中,有一个未解决的问题.


小智 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) {}
};
Run Code Online (Sandbox Code Playgroud)

创建自己的电话状态监听器后,使用位掩码将其注册到Telephony Manager,以指示要监听的事件,如以下代码段所示:

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);
Run Code Online (Sandbox Code Playgroud)

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

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)