Android - GsmCellLocation和getCid()错误

时间:2011-10-15 22:31:25

标签: android cell

我正在尝试获取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的回复

2 个答案:

答案 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)。然后,您还可以使用其中一个可用methodsif(tm.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA)获得单独的结果。