Android擷取電訊廠商,android電訊廠商
今天接到一個新需求,要給伺服器上送裝置電訊廠商名稱,之後我的第一反應是,umeng都無法精確統計電訊廠商,我如何判斷上送具體的電訊廠商呢?如:
這張圖裡反映了友盟統計到使用者手機的電訊廠商名稱,這些名稱什麼樣子的都有。有什麼辦法精確判斷具體是什麼電訊廠商呢?比如,只返回“中國移動”,“中國聯通”,“中國電信”。
我這裡解決的方案是通過裝置的MCC/MNC代碼來判斷。
首先,我們要瞭解MCC/MNC是什麼,請看WIKI百科。通過閱讀,我們能夠知道,只要對比MCC/MNC編碼,就能知道具體是什麼電訊廠商了。
其次,就是具體代碼了,如下:
/** * 返回電訊廠商 需要加入許可權 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <BR> * * @return 1,代表中國移動,2,代表中國聯通,3,代表中國電信,0,代表未知 * @author youzc@yiche.com */ public int getOperators(Context context) { // 行動裝置網路代碼(英語:Mobile Network Code,MNC)是與行動裝置國家代碼(Mobile Country Code,MCC)(也稱為“MCC / // MNC”)相結合, 例如46000,前三位是MCC,後兩位是MNC 擷取手機服務商資訊 int OperatorsName = 0; 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 = 1; } else if (IMSI.startsWith("46001") || IMSI.startsWith("46006")) { OperatorsName = 2; } else if (IMSI.startsWith("46003") || IMSI.startsWith("46005")) { OperatorsName = 3; } return OperatorsName; }
通過用戶端本地比對MCC/MNC確定電訊廠商這種方式,本身我是不贊同的,我認為把MCC/MNC上送到伺服器,由伺服器判斷這才是最優方案。因為應用打好包分發出去,代碼就是死的,未來不可以擴充比對,但是伺服器是可以動態,隨時配置比對的MCC/MNC編碼。