2012-11-29 112 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)); 
    } 
}