2012-11-29 27 views
6

我想獲取CellInfo數據,但cellinfo.size()總是發生在模擬器中的NullPointerException中 。Android API列表<cellinfo>

CellInfo Link

我不知道該異常的情況下,任何人都知道的原因是什麼?

我是否寫錯了代碼?或任何人遇到同樣的例外?

TelephonyManager TM = (TelephonyManager) this 
      .getSystemService(Context.TELEPHONY_SERVICE); 
    List<CellInfo> cellinfo = TM.getAllCellInfo(); 
    Log.d("AA",Integer.toString(cellinfo.size())); 
+0

你是否確定你使用API​​級別爲17的模擬器/手機? – Arseniy

+0

是的!我選擇API級別17模擬器! –

回答

0

某些電話信息受到權限保護。您的應用程序無法訪問受保護的信息,除非它的清單文件中聲明瞭相應的權限。

0

我有同樣的問題,只有在s4.hence不得不刪除小區信息監聽器(PhoneStateListener.LISTEN_CELL_INFO)序工作,它的工作。

0

TelephonyManager.getAllCellInfo()在API級別17中添加,因此您可以在Api Level 17和+上使用它。

還必須添加ACCESS_COARSE_LOCATION權限清單文件:

返回
名單CellInfo或空,如果信息不可用。
需要 權限:ACCESS_COARSE_LOCATION

See Docs

+0

已添加權限,但我仍然收到NullPointerException。 這次我在Samsung Note3(Android 4.3)中試用它。 –

0

好,我有同樣的麻煩! CellInfo爲空,因爲我們沒有放任何東西。所以我試着幫助聽衆一點點。我強迫他將.getAllCellInfo放入監聽器。這是對我有用的東西。

class MyPhoneStateListener extends PhoneStateListener 
{ 
    int signal; 
    String cellList; 
    @Override 
    public void onCellInfoChanged(List<CellInfo> cellInfo) 
    { 
     super.onCellInfoChanged(cellInfo); 
     cellInfo = Tel.getAllCellInfo(); 
     if (cellInfo!=null) 
      cellList = cellInfo.toString(); 
     else cellList="ni mierda"; 
     mSignalStrengthView.append("" + String.valueOf(cellList)); 
    } 
    @Override 
    public void onSignalStrengthsChanged(SignalStrength signalStrength) 
    { 
     super.onSignalStrengthsChanged(signalStrength); 
     signal = signalStrength.getGsmSignalStrength()*2-113; 
     mSignalStrengthView.append("GSM signal strength is " + String.valueOf(this.signal)); 
    } 
}