① android怎麼獲取手機imei號
您可以通過手機設置的關於本機選項下查看手機IMEI碼。
也可以通過撥號鍵盤輸入*#06#獲得。
② 如何獲取android設備的imei號
一般的智能手機,在手機撥號鍵盤上輸入*#06#就會顯示出本機的IMEI號碼。
可以取出電池的手機,把後蓋打開,取出電池,手機電池槽上就貼有IMEI號碼的標簽。
不可取下後蓋的手機,一般IMEI號碼的標簽就貼在手機後蓋上。
IMEI(International Mobile Equipment Identity,移動設備國際識別碼,又稱為國際移動設備標識)是手機的唯一識別號碼。
③ Android如何獲取手機IMEI
/**
* 獲取手機IMEI
*/
private static StringgetIMEI(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
return null;
}
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager ==null) {
return null;
}
@SuppressLint({"MissingPermission", "HardwareIds"}) String imei = telephonyManager.getDeviceId();
return imei;
}catch (Exception e) {
return null;
}
}
④ android 代碼獲取IMEI,IMSI都為空,怎麼解決
Android獲取IMSI和IMEI :
IMSI是一個唯一的數字,標識了GSM和UMTS 網路里的唯一一個用戶.
它存儲 在手機的SIM卡里,它會通過手機發送到網路上。
IMEI也是一串唯一的數字,標識了GSM 和UMTS網路里的三星 Galaxy I9100.。
它通常被列印在手機里電池下面的那一面,撥 *#06# 也能看到它。
代碼:
這里是你在Android里讀出 唯一的 IMSI-ID/IMEI-ID 的方法。
Java:
StringmyIMSI=
android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI
);
//withinmyemulatoritreturns:310995000000000
StringmyIMEI=
android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI
);
//withinmyemulatoritreturns:000000000000000
手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由於移動運營商沒有把手
機號碼的數據寫入到sim卡中。sim卡只有唯一的編號,供網路與設備識別那就是imsi號碼,手機的信號也可以說是通過這個號碼在網路中傳遞的,並不是手機號碼。
試想,你的sim丟失後,補辦一張新的會換號碼嗎? —不會就是因為在你的手機號碼對應的 imsi號在移動運營商中被修改成新sim卡的imsi號碼。
這個就像是一個變數,當移動運營商為它賦值了,它自然就會有值。不賦值自然為空。
/** * 獲得手機的一些標志符* *@paramc *@returnString 手機的類型 */
publicStringfetch_status(Contextc){
TelephonyManagertm=(TelephonyManager)c
.getSystemService(Context.TELEPHONY_SERVICE);//
Stringstr="";
StringIMSI=tm.getSubscriberId();
str+="DeviceId(IMEI)="+tm.getDeviceId()+"/n";
str+="DeviceSoftwareVersion="+tm.getDeviceSoftwareVersion()
+"/n";
str+="Line1Number="+tm.getLine1Number()+"/n";
return str;
}
⑤ 如何獲取android設備的imei號
獲取android設備的imei號可以打開撥號盤,輸入*#06#即可查看IMEI號。
國際移動設備識別碼(IMEI:International Mobile Equipment Identification Number)是區別移動設備的標志,儲存在移動設備中,可用於監控被竊或無效的移動設備。IMEI可用移動終端設備通過鍵入"*#06#"查得(不同廠商的手機所需輸入的內容不同,同一廠商不同手機所需輸入的內容也可能不同)。其總長為15位,每位數字僅使用0~9的數字(含義見下文)。
IMEI俗稱"串號",存儲在手機的EEPROM(俗稱"碼片")里,熟悉並了解這個號碼對我們今後識別手機會起到非常大的作用。
⑥ android手機導致獲取不到mac地址,imei,imsi的因素有哪些
UICC初始化失敗。是其中之一。第二許可權問題。UICC初始化屬於底層的一些東西,一本書不一定說的明白,大致就是這樣一個過程,你調用一些封裝好的API調用通信框架的函數,調用RIL操作數據機。如果這中間任何一個環節不通暢,都會導致獲取不到結果。一個手機開機,都必須初始化數據機和UICC。所以我說初始化失敗也是原因之一。
⑦ 華為手機安裝軟體出現無法獲取imei許可權是什麼情況
這個大多數是安裝了非華為認可的應用導致的。去設置裡面找到安全,找到安裝未知應用,打開那個即可安裝各種應用了。
⑧ 軟體說找不到手機的IMEI 啥意思
就是讀取不到手機的imei碼,你可以到手機的應用許可權設置裡面看看是不是禁用了這款軟體讀取IMEI碼的功能。
⑨ android imei獲取
隨著android系統不斷升級,android設備的imei號已經越來越難獲取了。網上一些推薦會用meid、androidid來代替imei號。但是因為項目推廣需要比對渠道那邊回傳imei號來確認新增。
發現部分機型渠道(eg:快手)可以獲取到而我們獲取不到,導致無法確認新增。最終在TelephonyManager中找到getDeviceSoftwareVersion()方法。可以變相實現獲取imei號(但也會有getDeviceSoftwareVersion獲取不到的機型,不過驗證渠道那邊也獲取不到了)。
public static String getIMEI() {
TelephonyManager telephonyManager = (TelephonyManager) BaseApplication.getAppContext().getSystemService(Context.TELEPHONY_SERVICE);
String imei = null;
if (AndPermission.hasPermissions(BaseApplication.getAppContext(), Manifest.permission.READ_PHONE_STATE)) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
imei = telephonyManager.getImei();
if (!TextUtils.isEmpty(imei)) {
return imei;
} else {
String softwareVersion = getDeviceSoftwareVersion();
if (!TextUtils.isEmpty(softwareVersion) && softwareVersion.length() > 14) {
String imeiHead = softwareVersion.substring(0, 14);
imei = imeiHead + luhn(imeiHead);
return imei;
} else {
return null;
}
}
} else {
return telephonyManager.getDeviceId();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return imei;
}
/**
* Luhn演算法
* 根據號碼獲取校驗位
*
* @param cardNumber
* @return
*/
public static int luhn(String cardNumber) {
int totalNumber = 0;
for (int i = cardNumber.length() - 1; i >= 0; i -= 2) {
int tmpNumber = calculate(Integer.parseInt(String.valueOf(cardNumber.charAt(i))) * 2);
if (i == 0) {
totalNumber += tmpNumber;
} else {
totalNumber += tmpNumber + Integer.parseInt(String.valueOf(cardNumber.charAt(i - 1)));
}
其實是因為getDeviceSoftwareVersion和getImei()拼接規則只有末位兩個數不相同,而imei的末位數可以通過luhn演算法獲取,從而拼接成imei值(自測有效)。
但是畢竟還是有部分機型獲取不到imei,可以使用oaid來補充說明。
如果是自己app內部做唯一標識的話可以用meid、androidid或deviceid來代替imei
public static String getUniqueId() {
TelephonyManager telephonyManager = (TelephonyManager) BaseApplication.getAppContext().getSystemService(Context.TELEPHONY_SERVICE);
if (AndPermission.hasPermissions(BaseApplication.getAppContext(), Manifest.permission.READ_PHONE_STATE)) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
⑩ 為什麼在Android2.3.4下獲取不到IMEI
獲取不到是因為許可權沒有開放,要做一下配置:
加入許可權
在manifest.xml文件中要添加 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
實現方法參考代碼
package net.sunniwell.app;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.CellLocation;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
public class TelManager extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
/*
* 電話狀態:
* 1.tm.CALL_STATE_IDLE=0 無活動
* 2.tm.CALL_STATE_RINGING=1 響鈴
* 3.tm.CALL_STATE_OFFHOOK=2 摘機
*/
tm.getCallState();//int
/*
* 電話方位:
*
*/
tm.getCellLocation();//CellLocation
/*
* 唯一的設備ID:
* GSM手機的 IMEI 和 CDMA手機的 MEID.
* Return null if device ID is not available.
*/
tm.getDeviceId();//String
/*
* 設備的軟體版本號:
* 例如:the IMEI/SV(software version) for GSM phones.
* Return null if the software version is not available.
*/
tm.getDeviceSoftwareVersion();//String
/*
* 手機號:
* GSM手機的 MSISDN.
* Return null if it is unavailable.
*/
tm.getLine1Number();//String
/*
* 附近的電話的信息:
* 類型:List<NeighboringCellInfo>
* 需要許可權:android.Manifest.permission#ACCESS_COARSE_UPDATES
*/
tm.getNeighboringCellInfo();//List<NeighboringCellInfo>
/*
* 獲取ISO標準的國家碼,即國際長途區號。
* 注意:僅當用戶已在網路注冊後有效。
* 在CDMA網路中結果也許不可靠。
*/
tm.getNetworkCountryIso();//String
/*
* MCC+MNC(mobile country code + mobile network code)
* 注意:僅當用戶已在網路注冊時有效。
* 在CDMA網路中結果也許不可靠。
*/
tm.getNetworkOperator();//String
/*
* 按照字母次序的current registered operator(當前已注冊的用戶)的名字
* 注意:僅當用戶已在網路注冊時有效。
* 在CDMA網路中結果也許不可靠。
*/
tm.getNetworkOperatorName();//String
/*
* 當前使用的網路類型:
* 例如: NETWORK_TYPE_UNKNOWN 網路類型未知 0
NETWORK_TYPE_GPRS GPRS網路 1
NETWORK_TYPE_EDGE EDGE網路 2
NETWORK_TYPE_UMTS UMTS網路 3
NETWORK_TYPE_HSDPA HSDPA網路 8
NETWORK_TYPE_HSUPA HSUPA網路 9
NETWORK_TYPE_HSPA HSPA網路 10
NETWORK_TYPE_CDMA CDMA網路,IS95A 或 IS95B. 4
NETWORK_TYPE_EVDO_0 EVDO網路, revision 0. 5
NETWORK_TYPE_EVDO_A EVDO網路, revision A. 6
NETWORK_TYPE_1xRTT 1xRTT網路 7
*/
tm.getNetworkType();//int
/*
* 手機類型:
* 例如: PHONE_TYPE_NONE 無信號
PHONE_TYPE_GSM GSM信號
PHONE_TYPE_CDMA CDMA信號
*/
tm.getPhoneType();//int
/*
* Returns the ISO country code equivalent for the SIM provider's country code.
* 獲取ISO國家碼,相當於提供SIM卡的國家碼。
*
*/
tm.getSimCountryIso();//String
/*
* Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits.
* 獲取SIM卡提供的移動國家碼和移動網路碼.5或6位的十進制數字.
* SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷).
*/
tm.getSimOperator();//String
/*
* 服務商名稱:
* 例如:中國移動、聯通
* SIM卡的狀態必須是 SIM_STATE_READY(使用getSimState()判斷).
*/
tm.getSimOperatorName();//String
/*
* SIM卡的序列號:
* 需要許可權:READ_PHONE_STATE
*/
tm.getSimSerialNumber();//String
/*
* SIM的狀態信息:
* SIM_STATE_UNKNOWN 未知狀態 0
SIM_STATE_ABSENT 沒插卡 1
SIM_STATE_PIN_REQUIRED 鎖定狀態,需要用戶的PIN碼解鎖 2
SIM_STATE_PUK_REQUIRED 鎖定狀態,需要用戶的PUK碼解鎖 3
SIM_STATE_NETWORK_LOCKED 鎖定狀態,需要網路的PIN碼解鎖 4
SIM_STATE_READY 就緒狀態 5
*/
tm.getSimState();//int
/*
* 唯一的用戶ID:
* 例如:IMSI(國際移動用戶識別碼) for a GSM phone.
* 需要許可權:READ_PHONE_STATE
*/
tm.getSubscriberId();//String
/*
* 取得和語音郵件相關的標簽,即為識別符
* 需要許可權:READ_PHONE_STATE
*/
tm.getVoiceMailAlphaTag();//String
/*
* 獲取語音郵件號碼:
* 需要許可權:READ_PHONE_STATE
*/
tm.getVoiceMailNumber();//String
/*
* ICC卡是否存在
*/
tm.hasIccCard();//boolean
/*
* 是否漫遊:
* (在GSM用途下)
*/
tm.isNetworkRoaming();//
}
}