您如何在Android中获取手机的MCC和MNC?
我发现检索MCC和MNC的唯一方法是重写一个活动的onConfigurationChanged方法,如下所示:
public void onConfigurationChanged(Configuration config) { super.onConfigurationChanged(config); DeviceData.MCC = "" + config.mcc; DeviceData.MNC = "" +config.mnc; }
但是,一旦应用程序启动,我就需要这些数据,并且不能等待用户切换手机的方向或等效方式来触发此方法。 有没有更好的方式来访问当前的configuration对象?
TelephonyManager有一个将MCC + MNC作为string( getNetworkOperator() )返回的方法,它将以您想要的方式进行操作。 您可以通过以下方式访问它:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String networkOperator = tel.getNetworkOperator(); if (!TextUtils.isEmpty(networkOperator)) { int mcc = Integer.parseInt(networkOperator.substring(0, 3)); int mnc = Integer.parseInt(networkOperator.substring(3)); } }
你知道有一个活动电话有两个MCC / MNC? (一个是SIM卡的国家代码和运营商ID,另一个是用于networking/蜂窝塔的)。
如果getResources().getConfiguration().mcc
在飞行模式下不是空的,则它是Sim
值TelephonyManager.getSimOperator()
,而不是tower
值TelephonyManager.getNetworkOperator()
。
我不知道哪个OP是想要的,但是如果getConfiguration
真的是Sim
值,那么Answer 3会给他不同的结果。
你可以通过getResources().getConfiguration()
来访问当前configuration, getResources().getConfiguration()
做到这一点。
getResources().getConfiguration().mcc
是一个不好的select,因为它返回一个整数,因此会影响有效值,如01
或044
。 显然整数不是一个好的select。
详见Mobile_Network_Code
更新:在澳大利亚,我们在此validation了一个错误的案例。 getNetworkOperator
从getNetworkOperator
返回不同的值,后者是正确的。
在Android文档中查看详细信息: TelephonyManager
我发现networking运营商在没有连接到运营商(服务不可用)的情况下有时可以像65@5
那样,即使插入了SIM卡也是如此。 这发生在运行Android 4.1.2的三星S2上。
所以在转换为Int时必须小心。
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
好的,事实certificategetResources()。getConfiguration()。mcc技巧对于大多数用途来说可能更好,因为如果用户将他们的手机置于飞行模式或者使用Wi-Fi,那么它会返回一个空的MCC。
这是更新。 用这个
TelephonyManager tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String networkOperator = tel.getSimOperator(); System.out.println("************mnc,mcc"+networkOperator); if (!TextUtils.isEmpty(networkOperator)) { mcc = networkOperator.substring(0, 3); mnc = networkOperator.substring(3);System.out.println("************mnc,mcc"+mnc+mcc); }mnc_mcc.setText("************mnc,mcc"+mnc+","+mcc); }