【问题标题】:Null Issue with NeighboringCellInfo, CID and LACNeighboringCellInfo、CID 和 LAC 的空问题
【发布时间】: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 列表...

标签: java android


【解决方案1】:

您是否已确认您在清单文件中设置了正确的权限?

TelephonyManager 需要许多权限,具体取决于您使用的 API。大多数API都需要READ_PHONE_STATE,此外getNeighboringCellInfo的文档提到ACCESS_COARSE_UPDATES,但是我认为这可能是一个文档错误,您实际上需要ACCESS_COARSE_LOCATION,它被记录为“允许应用程序访问粗略(例如,Cell-ID、WiFi)位置”

【讨论】:

  • 只是一个旁注。我有一个类似的问题,包括所有需要的权限。只有设备硬重置解决了这个问题。
【解决方案2】:

cellid 实现因移动设备而异,因为这些功能被认为是可选的。例如:

三星(所有设备):getNeigbouringCells () 根本不受支持,总是返回一个空列表。

据此: http://wiki.opencellid.org/wiki/Android_library

【讨论】:

    【解决方案3】:

    遇到了同样的问题。尝试在分叉线程(非 UI)上运行对相邻单元格的查询。 至少我遇到的问题是锤头机器人会检查它并会立即返回 null 并在 logcat 中留下日志:

    @PhoneInterfaceManager: getNeighboringCellInfo RuntimeException - This method will deadlock if called from the main thread.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多