Kotlin allCellInfo возвращает ноль при выключенном GPS - PullRequest
4 голосов
/ 26 февраля 2020

У меня проблема в приложении, в котором есть функция, которая показывает текущий CellId.

Протестировано это приложение на разных телефонах, но некоторые из них не хотят показывать даже список allCellInfo, однако приложение под названием Network Cell Info отлично работает и показывает все о текущем CellId.

Только при включении GPS процесс работает нормально, и я вижу обновления CID.

Вот фрагмент кода (проверен на SDK 29):

@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
@RequiresApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@SuppressLint("MissingPermission")
fun getcids(manager: TelephonyManager): Pair<Int, String> {
    val cellInfoList = manager.allCellInfo
    if (cellInfoList != null) {
        for (networkType in cellInfoList) {
            if (networkType is CellInfoLte) {
                cid = networkType.cellIdentity.ci
                break
            }
            if (networkType is CellInfoWcdma) {
                val num = (networkType as CellInfoWcdma).cellIdentity
                cid = num.cid
                break
            }
            if (networkType is CellInfoGsm) {
                val num = (networkType as CellInfoGsm).cellIdentity
                cid = num.cid
                break
            }
        }
        return Pair(cid, cellInfoList.toString())
    }
    else{
        cid = 0
        return Pair(cid, "")
    }
}

Что можно сделать здесь, чтобы получить информацию о соте на каждом телефоне?

Обновление

Пока я пробовал это. Понизил SDK до 28 и получил методы с именами getNeighboringCellInfo() и getCellLocation(). Протестировано getCellLocation() на некоторых эмуляторах с Android 8 и ниже (насколько я знаю, Android 9 требует включения GPS для получения информации о ячейке). Все работало нормально без GPS, пока я не решил проверить это на своих телефонах.

В результате приложение cra sh на getCellLocation(), поскольку оно возвращает нулевое значение. Однако я также проверил информацию о ячейке сети, где увидел, что информация о текущих подключениях отображается без GPS.

1 Ответ

1 голос
/ 05 марта 2020

Насколько я знаю, Android 10 заставил ACCESS_FINE_LOCATION получить разрешение. При этом GPS должен быть включен. Только тогда, если информация доступна, этот метод вернет нужную вам информацию. Для Android 9.0 (API 28) или ниже он должен работать так, как ожидалось.

Итак, вот что я хотел бы проверить.

1) Чтобы узнать, имеет ли приложение разрешение READ_PHONE_STATE.

2) Чтобы узнать, имеет ли приложение разрешение ACCESS_FINE_LOCATION. (Для API 29 и выше)

3) Чтобы увидеть, действительно ли включен GPS. (Для API 29 и выше)

4) Чтобы проверить, есть ли SIM-карта, подключенная к устройству, и есть ли услуга.

Если они есть и информация по-прежнему нулевая, то Я бы заподозрил само устройство в этом деле. Я не уверен, в чем проблема, если все они на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...