2009-12-27 2 views
20

Я пытаюсь написать очень простое приложение для Android, которое проверяет силу сигнала текущей ячейки. До сих пор я нашел только что-то под названием getNeighboringCellInfo(), но я не уверен, включает ли он текущую ячейку.Как получить силу сигнала сотовой связи в Android?

Как получить силу сигнала CURRENT в Android?

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 easy [tutorial] (http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/) – mjosh

ответ

19

PhoneStateListener создать и обработать onSignalStrengthChanged обратного вызова. Когда ваше приложение будет инициализировано, оно должно дать вам начальное уведомление. Это в 1.x. в 2.x есть обход issue.

+0

Это работает в 3.x и 4.x? – Supuhstar

+0

Любое решение для 4.x - 8.x? – gtzinos

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) {} 
}; 

После того как вы создали свой собственный телефон государственного Listener, зарегистрировать его с помощью диспетчера телефонии с использованием битовой маски, чтобы указать события, которые вы хотите слушать, как показана в следующий фрагмент кода:

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"/> 
Смежные вопросы