2009-12-27 29 views
20

Tôi đang cố gắng viết một ứng dụng Android rất đơn giản để kiểm tra cường độ tín hiệu của ô hiện tại. Cho đến nay, tôi chỉ tìm thấy một cái gì đó gọi là getNeighboringCellInfo(), nhưng tôi không thực sự chắc chắn nếu điều đó bao gồm các tế bào hiện hành.Cách nhận cường độ tín hiệu dịch vụ di động trong Android?

Làm cách nào để nhận cường độ tín hiệu tế bào CURRENT trong Android?

getNeighborCellInfo() tải ô hiện tại? Nó không có vẻ như nó dựa trên kết quả mà tôi đã có thể nhận được với nó. Đây là mã hiện tại của tôi:

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

một đẹp d dễ dàng [hướng dẫn] (http://www.firstdroid.com/2010/05/12/get-provider-gsm-signal-strength/) – mjosh

Trả lời

19

tạo một PhoneStateListener và xử lý gọi lại onSignalStrengthChanged. Khi ứng dụng của bạn được khởi chạy, ứng dụng sẽ cung cấp cho bạn thông báo ban đầu. Đây là trong 1.x. trong 2.x, có một mở issue về điều này.

+0

Tính năng này có hoạt động ở dạng 3.x và 4.x không? – Supuhstar

+0

Bất kỳ giải pháp nào cho 4.x - 8.x? – gtzinos

13

Mã này có thể giúp:

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

Khi bạn đã tạo Điện thoại của riêng bạn Nhà nước Listener, đăng ký nó với Trình quản lý điện thoại sử dụng một bitmask để chỉ ra sự kiện mà bạn muốn nghe cho, như thể hiện trong sau đoạn mã:

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

Ngoài ra, cần thêm chúng vào AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
Các vấn đề liên quan