Нулевая проблема с NeighboringCellInfo, CID и LAC

Некоторое время я пытался получить 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, он показывает «true»). Еще один способ я нашел серфинг в сети (я немного обновил его)

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());  
 }  
}  
}

Но в этом случае приложение просто падает сразу после нажатия кнопки «Выполнить». Затмение не показывает ошибок. Может быть, у кого-то есть идеи, как исправить мои проблемы?

Logcat говорит: 10-05 22: 53: 27.923: ОШИБКА / 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);

Обновить. Я включил строку сверху, сбой исчез, но теперь после нажатия кнопки ничего не происходит. Обновлен исходный код.

 Cheryl Simon06 окт. 2010 г., 00:38
Используйте logcat, чтобы получить трассировку стека для сбоя. В eclipse откройте представление logcat или выберите перспективу DDMS.
 StalkerRus06 окт. 2010 г., 15:17
Интересная ситуация, похоже, я получаю пустой список соседей ...
 dbrettschneider06 окт. 2010 г., 14:12
У меня похожая проблема. Если у меня есть соединение 3G, все работает нормально, но на соединении 2G иногда нет cid и соседних ячеек. Возможно, это как-то связано с вашим типом соединения.
 StalkerRus06 окт. 2010 г., 14:20
Могу поспорить, что это должно работать по крайней мере на эмуляторе, но я получаю несколько сбоев (Невозможно открыть файл трассировки стека '/data/anr/traces.txt': разрешение запрещено), если я пытаюсь использовать любые методы для получения CID

Ответы на вопрос(3)

Реализация cellid варьируется от мобильного устройства к мобильному устройству, поскольку эти функции считаются необязательными. например:

Samsung (все устройства): getNeigbouringCells () вообще не поддерживается и всегда возвращает пустой список.

согласно этому:http://wiki.opencellid.org/wiki/Android_library

Была такая же проблема. Попробуйте выполнить запрос для соседних ячеек в разветвленном потоке (не в пользовательском интерфейсе). По крайней мере, где у меня была проблема, была проверка андроида-молотка для этого и возвращал ноль, немедленно оставляя журнал в logcat:

@PhoneInterfaceManager: getNeighboringCellInfo RuntimeException - This method will deadlock if called from the main thread.
Решение Вопроса

Вы убедились, что в файле манифеста установлены правильные разрешения?

TelephonyManager требует ряда разрешений в зависимости от используемого вами API. Тебе нужноREAD_PHONE_STATE для большинства API, кроме того, документация дляgetNeighboringCellInfo упоминаетACCESS_COARSE_UPDATESТем не менее, я думаю, что это может быть ошибкой, и вам действительно нужноACCESS_COARSE_LOCATION который задокументирован как «Разрешает приложению доступ к грубому (например, Cell-ID, WiFi) местоположению»

 Drejc22 февр. 2012 г., 21:25
Просто примечание. У меня была похожая проблема со всеми необходимыми разрешениями. Только аппаратный сброс устройства решил проблему.
 StalkerRus06 окт. 2010 г., 10:39
Я проверил мой манифест, все было включено

Ваш ответ на вопрос