getAllCellInfo()在Huawei Honor 7中返回一个空列表

时间:2017-05-10 07:37:35

标签: android telephonymanager cellinfo

我有一个获取手机信息塔的信息的Android应用程序。我使用这个getAllCellInfo()来获取主小区和相邻小区的信息。我在manifest.xml中包含了ACCESS_COARSE_LOCATION权限,并在运行时请求了权限。 它适用于其他手机,但在华为Honor 7中,该函数返回一个空列表。
 
我的代码:
enter image description here
目录下载: enter image description here

我检查了其他人的问题: getAllCellInfo returns null in android 4.2.1Android getAllCellInfo() returns null

从一个问题来看,我想华为手机,他们不支持getAllCellInfo(),直到我安装Network Cell Info LiteNetMonster,似乎应用程序可以获取华为Honor中的单元格信息7:

Network Cell Info Lite
enter image description here
NetMonster
enter image description here

有人有任何相关信息吗?

4 个答案:

答案 0 :(得分:2)

如果在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");
    }

答案 1 :(得分:2)

尽管这很晚,但对于遇到相同问题的其他人可能会有帮助。

首先让我解释一下问题:

  • 我试图在我的应用中使用getAllCellInfo()
  • 该应用在Android模拟器(单个Sim模拟器)上运行顺利。
  • 然后我在运行Android 6.0的“ Dual Sim,Huawei CAM-L21 ”和运行Android 4.4.2的“ Dual Sim,Honor 3c ”上进行了尝试。但是在华为上,getAllCellInfo()在Honor上返回了 空列表
  • 我尝试使用“ LG K8”。但是Android Studio无法识别手机。我在LG网站上找不到电话驱动程序(适用于Windows)!因此,我安装了一些通用的ADB驱动程序。不幸的是,Android Studio无法再次识别手机。
  • 该应用程序在某些单卡华为和三星手机上运行良好;我不记得这些型号了!

然后:

  • 我发现this page在其中提到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? // ... }

  • 我找到了this page (LG G4 not recognised by Android Studio)。根据{{​​3}},我贬低了LG驱动程序;最后,Android Studio调整了LG K8手机。

  • 最后,我的应用程序可以在双SIM卡手机上运行。

所以,我的发现:

  • getAllCellInfo在某些 Dual Sim Huawei / Honor手机 上不起作用。

  • 使用Henry Thomas's solution,以便Android Studio识别LG手机。

答案 2 :(得分:0)

有许多方法可以实现CellInfo()。

某些设备不支持 getAllCellInfo()

  1. 尝试 telephonyManager.getNeighboringCellInfo()(不建议使用此方法,但某些设备仍支持该方法)

  2. 要从该设备获取cellinfo,请尝试在SDK(API)21(不推荐)上构建您的应用。

(能够显示所有信息的应用很可能是针对API 21或更少的应用构建的)。

答案 3 :(得分:0)

可能为时已晚,但是当您定位到 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()
                        }
                    })
            }