web-dev-qa-db-ja.com

Androidで携帯電話のMCCとMNCを取得するにはどうすればよいですか?

MCCとMNCを取得する唯一の方法は、アクティビティのonConfigurationChangedメソッドをオーバーライドすることです。

public void onConfigurationChanged(Configuration config)
{
    super.onConfigurationChanged(config);
    DeviceData.MCC = "" + config.mcc;
    DeviceData.MNC = ""  +config.mnc;
}

ただし、アプリが起動するとすぐにこのデータが必要になり、ユーザーが電話の向きを変更するのを待つことができません。現在の構成オブジェクトにアクセスするより良い方法はありますか?

50
user108078

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));
    }
}
89
jargonjustin

アクティブな電話に2つのMCC/MNCがあることを知っていますか? (1つはSimカードの国コードとキャリアID、もう1つは使用中のネットワーク/セルタワー用です。)

機内モードでgetResources().getConfiguration().mccが空でない場合は、Sim value TelephonyManager.getSimOperator()ではなく、tower value TelephonyManager.getNetworkOperator()です。

OPがどれを望んでいるかはわかりませんが、getConfigurationが実際にSim値である場合、回答3は元のコードとは異なる結果を返します。

19
danS

現在の設定にアクセスするには、getResources().getConfiguration()がトリックを行います。

5
user188128

getResources().getConfiguration().mccは整数を返すので、01044などの有効な値を損なうため、悪い選択です。明らかに整数はこれには適していません。

詳細は Mobile_Network_Code をご覧ください

更新:オーストラリアでは、ここで間違ったケースを確認しました。 getNetworkOperatorgetSimOperatorとは異なる値を返しますが、後者は正しい値です。

詳細はAndroid doc: TelephonyManager

4
bruno.braga

ネットワークオペレーターが65@5 SIMカードが挿入されていても、オペレーターに接続されていない場合(サービスは利用不可)。これは、Android 4.1.2。

enter image description here

したがって、Intに変換するときは注意する必要があります。

 int mcc = Integer.parseInt(networkOperator.substring(0, 3));
2
kakopappa

わかりました。getResources()。getConfiguration()。mccのトリックはほとんどの目的に向いている可能性が高いことがわかります。なぜなら、他の1つでは、ユーザーが電話を機内モードにするか、Wi-Fiを使用すると空のMCC。

1
Artem

これは更新されます。これを使用してください

 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);
}
0
Akash pasupathi