getAllCellInfo() возвращает пустой список в Huawei Honor 7
У меня есть приложение для Android, которое получает информацию о вышках сотовой связи. Я использую этот getAllCellInfo() для получения информации о первичной ячейке и соседних ячейках. Я включил разрешение ACCESS_COARSE_LOCATION в manifest.xml и сделал запрос на разрешение во время выполнения. Это работает в других телефонах, но в Huawei Honor 7 функция возвращает пустой список.
Мой код:
Catlog:
Я проверил вопросы других людей: getAllCellInfo возвращает ноль в Android 4.2.1 и Android getAllCellInfo() возвращает ноль.
Из вопроса я подумал, что для телефонов Huawei они не поддерживают getAllCellInfo(), пока я не установил Network Cell Info Lite и NetMonster, и кажется, что приложения могут получать информацию о ячейке в Huawei Honor 7:
Сеть Cell Info Lite
NetMonster
У кого-нибудь есть информация по этому поводу?
4 ответа
Для небольшой работы, когда нет клетки в getAllCellInfo()
, Я использую getCellLocation()
чтобы получить primaryCellId и trackingAreaCode следующим образом:
Log.d(TAG, "updateCurrentCell: can't find any cells with getAllCellInfo");
CellLocation primaryLocation = telephonyManager.getCellLocation();
if (primaryLocation != null) {
int primaryCellId = Integer.parseInt(primaryLocation.toString().split(",")[1]);
int trackingAreaCode = Integer.parseInt(primaryLocation.toString().split(",")[0].replace("[", ""));
} else {
Log.d(TAG, "updateCurrentCell: not even with getCellLocation");
}
Хотя это происходит поздно, это может быть полезно для других, столкнувшихся с той же проблемой.
Сначала позвольте мне объяснить проблему:
- Я пытался использовать
getAllCellInfo()
в моем приложении. - Приложение прошло гладко на Android Emulator (single Sim Emulator).
- Затем я попробовал его на "Dual Sim, Huawei CAM-L21" под управлением Android 6.0 и "Dual Sim, Honor 3c" под управлением Android 4.4.2. Но на Huawei
getAllCellInfo()
вернул Empy List и null для Honor. - Пробовал использовать "LG K8". Но Android Studio не смогла распознать телефон. Не нашел на сайте LG драйвера телефона (для windows)! Итак, я установил несколько общих драйверов ADB. К сожалению, Android Studio снова не распознала телефон.
- Приложение работало хорошо на некоторых отдельных сим Huawei и Samsung телефонов; Я не могу вспомнить модели!
тогда:
Я нашел эту страницу, где упоминалось, что
getAllCellInfo
может не работать на некоторых телефонах:private void getAllCellInfo(List<CellInfo> cellInfo) { // only for registered cells is returned identify // SlimKat in Galaxy Nexus - returns null :-/ // Honor 7 - returns empty list (not null), Dual SIM? // ... }
Я нашел эту страницу (LG G4 не распознается Android Studio). Согласно решению Генри Томаса, я сбросил драйвер LG; и, наконец, Android Studio переработала телефон LG K8.
И, наконец, мое приложение работало на телефоне с двумя SIM-картами.
Итак, мои выводы:
getAllCellInfo
не работает на некоторых телефонах Dual Sim Huawei/Honor.Используйте драйверы LG, чтобы Android Studio распознала телефоны LG.
Есть много способов достичь CellInfo().
Некоторые устройства не поддерживают getAllCellInfo ().
Попробуйте telephonyManager.getNeighboringCellInfo () (этот метод устарел, но все еще поддерживается некоторыми устройствами)
Чтобы получить мобильную информацию с этого устройства, попробуйте создать приложение на SDK(API) 21.(Не рекомендуется).
(Приложение, которое может отображать всю информацию, с высокой вероятностью построено и ориентировано на API 21 или менее).
Может быть слишком поздно, но если вы ориентируетесь на Android 10 или выше, вам следует вызвать requestCellInfoUpdate.
val subscriptionManager = getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE)
as SubscriptionManager
for (subs in subscriptionManager.activeSubscriptionInfoList) {
val telephonyManager =
(getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager)
.createForSubscriptionId(subs.subscriptionId)
telephonyManager.requestCellInfoUpdate(mainExecutor,
object : TelephonyManager.CellInfoCallback() {
override fun onCellInfo(cellInfo: MutableList<CellInfo>) {
println("updated_cells_count: ${cellInfo.size}")
}
override fun onError(errorCode: Int, detail: Throwable?) {
super.onError(errorCode, detail)
println("updated_cells_error:\n")
detail?.printStackTrace()
}
})
}