5

SIM カードが権限なしで変更されたかどうかを確認し、ユーザーが望まない一部のネットワークおよび一部の国でアプリの要求を無効にするために、状態の後にmccandを取得しようとしています。mncSIM LOADEDREAD PHONE STATE

getSimOperator()は現在のキャリアによって変わる可能性があるため (ユーザーがローミング中かどうかなど) getNetworkOperator()、.

このメソッドは、nullたとえGSM のみの接続を備えた lycamobile カードが私に与えているなど、異なる結果を返す可能性SIMがあっても戻ることができますが、SIM カードを取り出して再度挿入すると、それが得られます。LOADEDmnc = 01mnc = 04

mnc が に対して異なる結果を与える理由を知っている人はいますgetNetworkOperator()か? getNetworkOperator()この場合、どちらの方法が優れていgetSimOperator()ますか?

また、の代わりに与える前などをgetResources().getConfiguration().mcc削除する可能性のある int 番号を与えるため、使用できません。0404

これは、SIM 状態の変更を確認するための私のコードです。

@Override
public void onReceive(final Context context, Intent intent) {
    if (intent != null) {

        Bundle extras = intent.getExtras();

        if (extras != null) {
            String ss = extras.getString(EXTRAS_SIM_STATUS);
            if (ss != null && (ss.equals("LOADED"))) {
                TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && hasPermissions(READ_PHONE_STATE)) {
                   //here I get the imsi
                }else{
                   L.d("NetworkOperator result %s", telephonyManager.getNetworkOperator()); 
                   //saving in shared preferences in order to check if the sim is allowed or not
                   //this is also called on application onCreate() so I can check the current SIM
               }
            } 
        }
    }
}

PS: 私が使用している SIM カードには GSM 接続しかありません。また、別のカード (4g 機能付き) で試してみましたが、ボーダフォン カードmncの場合と同じように、すべてが期待どおりに機能します。01

4

1 に答える 1