GPS 关闭时 Kotlin allCellInfo 返回 null

Pav*_*zev 5 android location cell kotlin

我在具有显示当前 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, "")
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里可以做什么来获取每部手机上的手机信息?

更新

到目前为止我尝试过这个。将 SDK 降级到 28 并获得了名为getNeighboringCellInfo()和 的方法getCellLocation()。在 Android 8 及更低版本的一些模拟器上进行了测试getCellLocation()(据我所知,Android 9 需要打开 GPS 才能获取手机信息)。在没有 GPS 的情况下一切都工作正常,直到我决定在手机上测试它。

结果应用程序崩溃,getCellLocation()因为它返回空值。不过,我还检查了网络小区信息,我看到有关当前连接的信息显示没有 GPS。

Fur*_*kul 1

据我所知,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 卡以及是否有服务。

如果这些都已到位,但信息仍然为空,那么我会怀疑这种情况下的设备本身。我不确定如果所有这些都到位的话会出现什么问题。