MCCとMNCを取得する唯一の方法は、アクティビティのonConfigurationChangedメソッドをオーバーライドすることです。
public void onConfigurationChanged(Configuration config)
{
super.onConfigurationChanged(config);
DeviceData.MCC = "" + config.mcc;
DeviceData.MNC = "" +config.mnc;
}
ただし、アプリが起動するとすぐにこのデータが必要になり、ユーザーが電話の向きを変更するのを待つことができません。現在の構成オブジェクトにアクセスするより良い方法はありますか?
TelephonyManager には、MCC + MNCを文字列として返すメソッドがあります( 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));
}
}
アクティブな電話に2つのMCC/MNCがあることを知っていますか? (1つはSimカードの国コードとキャリアID、もう1つは使用中のネットワーク/セルタワー用です。)
機内モードでgetResources().getConfiguration().mcc
が空でない場合は、Sim
value TelephonyManager.getSimOperator()
ではなく、tower
value TelephonyManager.getNetworkOperator()
です。
OPがどれを望んでいるかはわかりませんが、getConfiguration
が実際にSim
値である場合、回答3は元のコードとは異なる結果を返します。
現在の設定にアクセスするには、getResources().getConfiguration()
がトリックを行います。
getResources().getConfiguration().mcc
は整数を返すので、01
や044
などの有効な値を損なうため、悪い選択です。明らかに整数はこれには適していません。
詳細は Mobile_Network_Code をご覧ください
更新:オーストラリアでは、ここで間違ったケースを確認しました。 getNetworkOperator
はgetSimOperator
とは異なる値を返しますが、後者は正しい値です。
詳細はAndroid doc: TelephonyManager
ネットワークオペレーターが65@5
SIMカードが挿入されていても、オペレーターに接続されていない場合(サービスは利用不可)。これは、Android 4.1.2。
したがって、Intに変換するときは注意する必要があります。
int mcc = Integer.parseInt(networkOperator.substring(0, 3));
わかりました。getResources()。getConfiguration()。mccのトリックはほとんどの目的に向いている可能性が高いことがわかります。なぜなら、他の1つでは、ユーザーが電話を機内モードにするか、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);
}