2012-07-18 71 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」));