2009-12-27 36 views
20

Geçerli hücrenin sinyal gücünü denetleyen çok basit bir Android uygulaması yazmaya çalışıyorum. Şimdiye kadar, sadece getNeighboringCellInfo() adında bir şey buldum, ancak mevcut hücrenin dahil olup olmadığından emin değilim.Android'de hücre hizmeti sinyal gücü nasıl alınır?

Android'de CURRENT hücre sinyal gücünü nasıl alabilirim?

Geçerli hücreyi getNeighborCellInfo() mu alıyor? Bununla başarabildiğim sonuçlara dayanıyor gibi görünmüyor. İşte benim şimdiki kod:

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

güzel An d easy [eğitici] (http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/) – mjosh

cevap

19

bir PhoneStateListener oluşturmak ve onSignalStrengthChanged geri çağırma işlevinin gerçekleştirilmesi. Uygulamanız başlatıldığında, size ilk bildirim vermelidir. Bu 1.x'te. 2.x'te, bu konuda açık bir issue var. Kendi Telefon Devlet Dinleyici oluşturduktan sonra,

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

gösterildiği gibi, sizin için dinlemek istediğiniz olayları belirtmek için bir bit maskesi kullanılarak Telefon Yöneticisi ile kayıt:

+0

Bu, 3.x ve 4.x'te çalışıyor mu? – Supuhstar

+0

4.x - 8.x için herhangi bir çözüm var mı? – gtzinos

13

Bu kod yardımcı olabilir aşağıdaki kod parçası: Ayrıca

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 bu eklemeniz gerekir:

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