我正在尝试获取cellId和Lac值,但我仍然“意外停止”错误。
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
GsmCellLocation loc = (GsmCellLocation) tm.getCellLocation();
TextView text = (TextView) findViewById(R.id.text);
text.setText(loc.getCid());
}
这是一个非常简单的程序,我在这种形式下发现了很多次,但它既不在模拟器中工作(在模拟器中我有2.3.3和3.0),也不在电话中工作(平板电脑3.0)
权限我已尝试清单:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
感谢Jirka的回复
答案 0 :(得分:0)
您是否已在设置中启用无线网络进行本地化?在Android 2.3.4上你可以进行设置 - > gt; location-&gt;使用无线网络。启用它。现在你的代码应该运行了!
答案 1 :(得分:0)
如果您仍在寻找这个问题的答案,问题是loc.getCid()返回一个整数,而text.setText需要一个String。只需将最后一行更改为:
text.setText(Integer.toString(loc.getCid()));
我刚试过这个并且它运行正常。
另一点,虽然我不确定这一点(我很想听听别人的经历):你似乎在假设你在GSM手机上运行它。如果tm.getCellLocation()
返回CdmaCellLocation
,该怎么办?由于get.Cid()
类没有CdmaCellLocation
方法,我认为将代码放在if
语句中更安全,例如:if(tm.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM)
。然后,您还可以使用其中一个可用methods为if(tm.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA)
获得单独的结果。