1. 程式人生 > >android 判斷手機是否是國內的手機的方法(getSimCountryIso和getSimOperator)

android 判斷手機是否是國內的手機的方法(getSimCountryIso和getSimOperator)

有一個需求:如果手機插入了sim卡,要判斷該手機是否是大陸使用者?

方法一:

/**

     * 判斷國家是否是國內使用者
     * 
     * @return
     */
    public static boolean isCN(Context context) {
        TelephonyManager tm = (TelephonyManager) ContextHelper.getSystemService(context, Context.TELEPHONY_SERVICE);
        String countryIso = tm.getSimCountryIso();     
        boolean isCN = false;//判斷是不是大陸
        if (!TextUtils.isEmpty(countryIso)) {
            countryIso = countryIso.toUpperCase(Locale.US);
            if (countryIso.contains("CN")) {
                isCN = true;
            }
        }
        return isCN;

    }

方法二:

     /** 查詢手機的 MCC+MNC */
    private static String getSimOperator(Context c) {
        TelephonyManager tm = (TelephonyManager) ContextHelper.getSystemService(c, Context.TELEPHONY_SERVICE);
        try {
            return tm.getSimOperator();
        } catch (Exception e) {
            
        }
        return null;
    }


   /** 因為發現像華為Y300,聯想雙卡的手機,會返回 "null" "null,null" 的字串 */
    private static boolean isOperatorEmpty(String operator) {
        if (operator == null) {
            return true;
        }


        if (operator.equals("") || operator.toLowerCase(Locale.US).contains("null")) {
            return true;
        }


        return false;
    }
 

    /** 判斷是否是國內的 SIM 卡,優先判斷註冊時的mcc */
    public static boolean isChinaSimCard(Context c) {
        String mcc = getSimOperator(c);
        if (isOperatorEmpty(mcc)) {
            return false;
        } else {
            return mcc.startsWith("460");
        }
    }

綜上所述:發現方法二更加準確,方法一在部分手機上,比如一些聯想國行的手機會出現沒有插入sim卡,也能夠讀取到國家程式碼為cn。