我在应用程序中有一个问题,它有一个显示当前CellId的功能。
在不同的手机上测试了这个应用程序,但有些手机甚至不想显示allCellInfo列表,然而,这个名为Network的应用程序非常完美,显示了当前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()的方法。在一些带有Android8和更低版本的模拟器上测试了getCellLocation() (据我所知,Android9需要打开GPS才能获取手机信息)。没有GPS,一切都很顺利,直到我决定在手机上测试它。
因此,应用程序在getCellLocation()上崩溃,因为它返回空值。但是,我也检查了Network,在那里我看到了关于当前连接的信息,显示的是没有GPS的。
发布于 2020-03-05 13:49:04
据我所知,安卓10迫使ACCESS_FINE_LOCATION获得许可。有了这个,全球定位系统也需要启动。只有这样,如果信息是可用的,这个方法将返回您需要的信息。对于Android9.0 (API 28)或更低的版本,它应该可以像预期的那样工作。
所以,这是我要检查的。
1)查看应用程序是否拥有READ_PHONE_STATE权限。
2)查看应用程序是否拥有ACCESS_FINE_LOCATION权限。(空气污染指数29及以上)
( 3)看看GPS是否真的开着。(空气污染指数29及以上)
4)检查是否有SIM附在设备上,是否有服务。
如果这些信息仍然是空的,那么我就怀疑这个设备本身是空的。我不知道如果他们都到位的话会有什么问题。
https://stackoverflow.com/questions/60404060
复制相似问题