2012-07-18 77 views
3

我想知道我是否可以依靠Android上的国家,MCC等电话值来查看我的应用。我可以使用setprop在运行中更改它们吗?我试着改变使用setprop它似乎没有工作。从我的理解电话管理器是一个类/接口,它表示GSM或CDMA的硬件配置。在GSM的情况下,这可能是SIM卡,在CDMA的情况下,它可能是硬件。我的问题是:电话管理器值是否可靠且可更改(cdma)?

  • 谁在这两种情况下第一次更新这些值?
  • 这些值是否被操作系统保存为只读?
  • 如果用户旅行到不同的国家或地区,会如何自动更新某些值(如国家代码和MCC值)?
  • 我可以重置这些值吗?

我无意改变任何这些值,但想了解它的工作!如果有人能帮助我,我将不胜感激。

回答

1

@Bo CDMA的工作方式与GSM不同。 CDMA一直有一个家庭基地和许多访客基地的位置。并且您始终可以使用被认为对CDMA不可靠的TelephonyManager方法了解访客运营商。

2

根据Android文档

提供访问有关 设备上的电话服务的信息。应用程序可以使用此类中的方法来确定电话服务和状态,以及访问某些类型的订户信息。应用程序也可以注册一个监听器到 接收电话状态变化的通知。

TelephonyManager用于阅读电话信息。关于你的关于MCC的问题& MNC代码:是的,他们改变时,电话将在其他国家。您可以订阅接收这些事件并确定该用户现在位于不同的国家/地区。

+1

我找到了解决CDMA手机上这个问题的方法..如果是CDMA手机,那么手机总是有一个ICC硬件与GSM中的SIM卡相媲美。你所要做的就是使用与硬件相关的系统属性。以编程方式,您可以使用Java反射来获取此信息。这与GSM设备不同,即使系统根源也不可改变。 类 c = Class.forName(“android.os.SystemProperties”); 方法get = c.getMethod(“get”,String。类); String homeOperator =((String)get.invoke(c,“ro.cdma.home.operator.numeric”)); – rana 2012-07-23 19:00:30

+0

这是有用的信息,感谢分享! – kenota 2012-07-24 09:15:52

+1

请注意,当某人刚好*靠近边界时,这不可能导致误报。就像在你邻居国家的视野中在海滩上一样。在我住的所有时间都会发生。 – 2012-07-29 15:33:56

0

我决定将其添加为答案,以及...

我找到了一种方法,如果它是一款CDMA手机,以解决CDMA手机..在这个问题上,那么手机总是有一个ICC硬件媲美GSM中的SIM卡。你所要做的就是使用与硬件相关的系统属性。以编程方式,您可以使用Java反射来获取此信息。这与GSM设备不同,即使系统根源也不可改变。 Class c = Class.forName(“android.os.SystemProperties”);方法get = c.getMethod(“get”,String.class); String homeOperator =((String)get.invoke(c,“ro.cdma.home.operator.numeric”));