【发布时间】:2010-10-05 22:24:19
【问题描述】:
有一段时间我试图获取附近基站的 CellID 和 LAC。不幸的是,我没有做到这一点。第一种选择是使用:
GsmCellLocation xXx = new GsmCellLocation();
CID = xXx.getCid();
LAC = xXx.getLac();
Toast output = Toast.makeText(getApplicationContext(), "Base station LAC is "+LAC+"\n"
+"Base station CID is " +CID, Toast.LENGTH_SHORT);
output.show();
但在这种情况下,我收到 -1 值(据我了解,这意味着它不是 GSM,但当我使用 isGSM 检查时,它显示“真”)。 我发现的另一种上网方式(我更新了一点)
public void GetID(){
List<NeighboringCellInfo> neighCell = null;
TelephonyManager telManager = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);
neighCell = telManager.getNeighboringCellInfo();
for (int i = 0; i < neighCell.size(); i++) {
try {
NeighboringCellInfo thisCell = neighCell.get(i);
int thisNeighCID = thisCell.getCid();
int thisNeighRSSI = thisCell.getRssi();
log(" "+thisNeighCID+" - "+thisNeighRSSI);
} catch (NumberFormatException e) {
e.printStackTrace();
NeighboringCellInfo thisCell = neighCell.get(i);
log(neighCell.toString());
}
}
}
但在这种情况下,应用程序会在我按下执行按钮后立即崩溃。 Eclipse 没有显示错误。可能有人对如何解决我的问题有任何想法?
Logcat 说:10-05 22:53:27.923: ERROR/dalvikvm(231): 无法打开 堆栈跟踪文件“/data/anr/traces.txt”:权限被拒绝
使用的权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.SEND_SMS"></uses-permission>
<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
问题可能是我忘了包括:
TelephonyManager telManager = ( TelephonyManager )getSystemService(Context.TELEPHONY_SERVICE);
更新。我从上面添加了行,崩溃消失了,但是现在按下按钮后没有任何反应。 更新了源代码。
【问题讨论】:
-
使用 logcat 获取崩溃的堆栈跟踪。在 eclipse 中打开 logcat 视图,或者选择 DDMS 透视图。
-
我也有类似的问题。如果我有 3G 连接,一切正常,但在 2G 连接上,有时没有 cid 并且没有相邻小区。也许这与您的连接类型有关。
-
我敢打赌这至少应该在模拟器上工作,但如果我尝试使用任何获取 CID 的方法
-
有趣的情况,好像我得到了空的 neighCell 列表...