安卓如何在CDMA网络上识别运营商?

6
Android提供以下方法来确定网络运营商:http://developer.android.com/reference/android/telephony/TelephonyManager.html#getNetworkOperatorName()。然而,即使是文档中明确说明了:
返回当前注册运营商的字母名称。 可用性:仅当用户注册到网络时。CDMA网络上的结果可能不可靠(使用getPhoneType()来确定是否在CDMA网络上)。
问题是我们需要一种可靠的方法来检测运营商,以便我们可以识别流量来源。如果有类似的问题,最好的解决方案是什么?

好的,使用链接中提供的方法,如果返回null或无效结果,则使用getPhoneType()。 - Jack
getPhoneType会告诉我们我们正在使用CDMA网络,但我们需要确定我们在哪个CDMA网络上(即哪个运营商)。 - rbanikaz
3个回答

2
我的手机是在Verizon Wireless使用的。每天我都会经过信号漫游或者信号差的区域。我将使用Android的脚本层,记录下接下来一周中每十分钟调用getOperatorName()的结果。
还有另一种方法可能在android.telephony.cdma api中有效。文档中缺少可靠性免责声明。你只能得到一个网络ID而不是名称。不幸的是,这需要API级别5而不是1,如果这对你很重要的话。
记录getOperatorName()方法的结果并没有发现什么特别的情况。当我没有服务时,它始终返回null,当我有服务时,它始终返回“Verizon Wireless”。我相信这并没有什么帮助。
编辑:添加和更正。 添加 - 链接的解释 更正 - API级别为5而不是17
编辑2:测试结果

欢迎来到 Stack Overflow。在链接时,请尝试将必要的部分添加到您的答案中。 - Cezar
抱歉,我不太明白您的意思。您是指在评论中添加必要的部分,还是我应该包含更多信息来解释我在答案中提供的链接? - M. Betzer
没问题。我通常喜欢在答案中看到所引用链接中包含的基本信息。有时候可以以一种方式提供基本信息,让提问者能够实现解决方案而无需阅读整个参考资料。如果您认为这不是这种情况,请不要担心,再次欢迎 =) - Cezar
点赞了,感谢测试结果。看起来这个方法并不是那么不可靠。 - A.J.
实际上它是不可靠的。我也从用户那里得到了像家庭、学校、板球等结果。但它更经常给出正确的运算符,而不是这些运算符别名。 - A.J.

0

我目前也在寻找解决这个问题的办法。根据这个thread,可以使用CdmaCellLocation.getNetworkIdCdmaCellLocation.getSystemId。由于德国没有CDMA网络,所以我无法验证这个方法是否可行...


-1

你认为这可能是谷歌停止支持CDMA的先兆之一吗?在框架内玩耍,或者找到另一个游乐场,这就是我听到谷歌说的话。还有一点,运营商应用程序烧录到ROM中有时会留下安全漏洞。

至于你问题的可能答案……你从哪里获取信息?APN设置可能会告诉你,或者在build.prop中对已知运营商线路进行断言可能会提供我需要的信息(我做业余rom)。另外,如果你亲自检查手机,运营商通常都有品牌标志;)你从什么角度获取信息呢?

罗布


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接