Home » Android 程式片段

[Android]利用 TelephonyManager 取得電信網路資訊

每支手機都有唯一的 IMEI(International Mobile Equipment Identity number)IMSI(International Mobile Subscriber Identity),因此有些程式會利用這些碼來當做產品註冊時使用。

我們可透過 TelephonyManager 來取得這些資訊,同時也能取得跟提供電信服務的相關資料,例如:電信公司名稱行動網路類型行動通訊類型等等。


只要先取得 Context.TELEPHONY_SERVICE 後,就能利用 TelephonyManager 來取得需要的內容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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()];

當然要讀取手機的資訊也是要有權限允許的:

1
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

不過好像除了遠傳電信之外,其它幾家的都無法使用 getLine1Number() 來取得電話號碼。

7 筆針對 [Android]利用 TelephonyManager 取得電信網路資訊 的迴響

  1. 你好阿 可以請問你如何抓到手機號碼嗎 我試了你寫的也都直接出現強制關閉 我有給權限 我參考別人寫的也都出現錯誤耶 可以請您在試試看這個功能然後幫大家解答嗎

發表迴響