每支手機都有唯一的 IMEI(International Mobile Equipment Identity number) 與IMSI(International Mobile Subscriber Identity),因此有些程式會利用這些碼來當做產品註冊時使用。
我們可透過 TelephonyManager 來取得這些資訊,同時也能取得跟提供電信服務的相關資料,例如:電信公司名稱、行動網路類型或行動通訊類型等等。
只要先取得 Context.TELEPHONY_SERVICE 後,就能利用 TelephonyManager 來取得需要的內容:
- import android.content.Context;
- import android.telephony.TelephonyManager;
-
- TelephonyManager telManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
-
- // 手機號碼
- String lineNumber = telManager.getLine1Number();
-
- // 手機 IMEI
- String imei = telManager.getDeviceId();
-
- // 手機 IMSI
- String imsi = telManager.getSubscriberId();
-
- // 手機漫遊狀態
- String roamingStatus = telManager.isNetworkRoaming() ? "漫遊中" : "非漫遊";
-
- // 電信網路國別
- String country = telManager.getNetworkCountryIso();
-
- // 電信公司代號
- String operator = telManager.getNetworkOperator();
-
- // 電信公司名稱
- String operatorName = telManager.getNetworkOperatorName();
-
- // 行動網路類型
- String[] networkTypeArray = {"UNKNOWN", "GPRS", "EDGE", "UMTS", "CDMA", "EVDO 0", "EVDO A", "1xRTT", "HSDPA", "HSUPA", "HSPA"};
- String networkType = networkTypeArray[telManager.getNetworkType()];
-
- // 行動通訊類型
- String[] phoneTypeArray = {"NONE", "GSM", "CDMA"};
- String phoneType = phoneTypeArray[telManager.getPhoneType()];
複製代碼
當然要讀取手機的資訊也是要有權限允許的:
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
複製代碼
不過好像除了遠傳電信之外,其它幾家的都無法使用 getLine1Number() 來取得電話號碼。
http://abgne.tw/android/android-code-snippets/android-telephonymanager-network-information.html
|