天天看點

Android擷取營運商

今天接到一個新需求,要給伺服器上送裝置營運商名稱,之後我的第一反應是,umeng都無法精确統計營運商,我如何判斷上送具體的營運商呢?如下圖:

Android擷取營運商

這張圖裡反映了友盟統計到使用者手機的營運商名稱,這些名稱什麼樣子的都有。有什麼辦法精确判斷具體是什麼營運商呢?比如,隻傳回“中國移動”,“中國聯通”,“中國電信”。

我這裡解決的方案是通過裝置的MCC/MNC代碼來判斷。

首先,我們要了解MCC/MNC是什麼,請看WIKI百科。通過閱讀,我們能夠知道,隻要對比MCC/MNC編碼,就能知道具體是什麼營運商了。

其次,就是具體代碼了,如下:

/**
     * 傳回營運商 需要加入權限 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <BR>
     * 
     * @return 1,代表中國移動,2,代表中國聯通,3,代表中國電信,0,代表未知
     * @author [email protected]
     */
 public int getOperators(Context context) {
        // 移動裝置網絡代碼(英語:Mobile Network Code,MNC)是與移動裝置國家代碼(Mobile Country Code,MCC)(也稱為“MCC /
        // MNC”)相結合, 例如46000,前三位是MCC,後兩位是MNC 擷取手機服務商資訊
        int OperatorsName = ;
        String IMSI =  (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE).getSubscriberId();
        // IMSI号前面3位460是國家,緊接着後面2位00 營運商代碼
        System.out.println(IMSI);
        if (IMSI.startsWith("46000") || IMSI.startsWith("46002") || IMSI.startsWith("46007")) {
            OperatorsName = ;
        } else if (IMSI.startsWith("46001") || IMSI.startsWith("46006")) {
            OperatorsName = ;
        } else if (IMSI.startsWith("46003") || IMSI.startsWith("46005")) {
            OperatorsName = ;
        }
        return OperatorsName;
    }
           

通過用戶端本地比對MCC/MNC确定營運商這種方式,本身我是不贊同的,我認為把MCC/MNC上送到伺服器,由伺服器判斷這才是最優方案。因為應用打好包分發出去,代碼就是死的,未來不可以擴充比對,但是伺服器是可以動态的,随時配置比對的MCC/MNC編碼。