导航:首页 > 操作系统 > android设备唯一标识

android设备唯一标识

发布时间:2022-06-17 05:21:16

① 如何获取android唯一标识

你好,手机先生为你解答
一共有 五大方法:(推荐第五种)

1.设备ID(DEVICE_ID)

Android系统为开发者提供的用于标识手机设备的标识码。它会根据不同的手机设备返回IMEI,MEID或者ESN码(IMEI是手机的身份证,MEID是CDMA制式(电信运营的)的专用身份证;IMEI是15位,MEID是14位)。

l 获取方法

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

String DEVICE_ID =tm.getDeviceId();l 注意点:

没有通话的硬件功能,无法获得DEVICE_ID。

需要READ_PHONE_STATE权限,部分用户会怀疑软件的安全性。

(Android 6.0 以上需要用户手动赋予该权限)

厂商定制系统中的Bug,可能是一串0或者一串*号。

2. SIM卡序列号

不同SIM卡的序列号不同

l 获取办法

TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);

String simSerialNum = tm.getSimSerialNumber();l 注意点

手机未装SIM卡或者不可用时,返回 null.

也需要 READ_PHONE_STATE 权限。

3. 设备序列号(SERIAL)

l 获取办法

String serialNum = android.os.Build.SERIAL;l 注意点

所有的CDMA 设备对于却返回一个空值

Android系统2.3版本以上

4. ANDROID_ID

在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。

l 获取办法

String ANDROID_ID = System.getString(getContentResolver(), Settings.System.ANDROID_ID);l 注意点

定制系统的Bug:不同的设备可能会产生相同的,有些设备返回的值为null。

在 Android 4.2 及以上, 设备启用多用户功能后,每个用户的 Android_ID 不相同。

部分设备的ANDROID_ID和TelephonyManager.getDeviceId()返回相同的值

5. 自定义UUID(本人推荐)

public class Installation {

private static String sID = null;

private static final String INSTALLATION = "INSTALLATION";

public synchronized static String id(Context context) {

if (sID == null) {

File installation = new File(context.getFilesDir(), INSTALLATION);

try {

if (!installation.exists()) writeInstallationFile(installation);

sID = readInstallationFile(installation);

} catch (Exception e) {

throw new RuntimeException(e);

}

}

return sID;

}

private static String readInstallationFile(File installation) throws IOException {

RandomAccessFile f = new RandomAccessFile(installation, "r");

byte[] bytes = new byte[(int) f.length()];

f.readFully(bytes);

f.close();

return new String(bytes);

}

private static void writeInstallationFile(File installation) throws IOException {

FileOutputStream out = new FileOutputStream(installation);

String id = UUID.randomUUID().toString();

out.write(id.getBytes());

out.close();

}
希望我的建议能帮到你,祝你生活愉快
望采纳,谢谢!

② 如何唯一的标识一台Android设备

通过imei来判定,是国际移动设备标识的缩写,IMEI由15位数字组成。
IMEI是手机的唯一识别号码。我们从这个缩写的全称中来分析它的含义:
“移动设备”就是手机,不包括便携式电脑。
“国际”这个字眼也表明了它可辨识的范围是全球,即全球范围内IMEI不会重复。
“身份”表明了它的作用,是辨识不同的手机;一机一号,类似于人的身份证号。
“码”字又说明它是一串编号,常称为手机的“串号”、“电子串号”。
手机在生产时,就被赋予一个IMEI。
手机的IMEI,就如同公民身份证号,一部手机对应一个全球唯一的15位身份串号,将逐渐成为识别手机归属和性质的权威标志。
如果手机丢失,通过运营商将该手机的IMEI列入黑名单,该手机将被禁止使用,这样丢失的手机就不能用了。
IMEI数据库具有白名单和黑名单功能,录入失窃和遗失手机的国际移动设备识别码(IMEI),便可立马知晓手机来例及归属,对于购买手机(尤其是购买二手手机)的消费者提供查询参考,为避免购买来例不明的手机遭受财产损失。同时,电信运营商对于数据库黑名单中的手机,拒绝提供入网服务,如将数据库黑名单提交到全球移动通信系统协会的IMEI数据库,可更有效防止跨境批量销售非法取得被盗手机的发生。

③ 如何获取Android唯一标识

在Android中,有以下几种方法获取这样的ID。


1.The IMEI: 仅仅只对android手机有效:

通过以上算法,可产生32位的16进制数据:

现在就可以对其进行你的应用了。

④ android怎么获取APP的唯一标识applicationId

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。
在Android中,有以下几种方法获取这样的ID。

1. The IMEI: 仅仅只对Android手机有效:
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE

采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。
2. Pseudo-Unique ID, 这个在任何Android手机中都有效
有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:
String m_szDevIDShort = "35" + //we make this look like a valid IMEI
Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits
大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。

⑤ 如何获取Android唯一标识

获取Android唯一标识的具体操作步骤:

  1. DEVICE_ID

假设确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。在以前,Android设备是手机,这个DEVICE_ID可以同

通过TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码,但它在使用的过程中

会遇到很多问题:


非手机设备:如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID

权限:获取DEVICE_ID需要READ_PHONE_STATE权限,如果只为了获取它,没有用到其它的通话功能,那这个权限有点大才小用

bug:在少数的一些手机设备上,该实现有漏洞,会返回垃圾,如:zeros或者asterisks的产品。


2.MACADDRESS

也可以通过手机的Wifi或者蓝牙设备获取MACADDRESS作为DEVICEID,但是并不建议这么做,因为并不是所有的设备都有Wifi,并且,如果Wifi没有打开,那硬件设备无法返回MACADDRESS.


3.SerialNumber

在Android2.3可以通过android.os.Build.SERIAL获取,非手机设备可以通过该接口获取。

4.ANDROID_ID

ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后该数重置


ANDROID_ID似乎是获取DeviceID的一个好选择,但它也有缺陷:


它在Android<=2.1orAndroid>=2.3的版本是可靠、稳定的,但在2.2的版本并不是100%可靠的

在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID:9774d56d682e549c


5.InstalltionID:UUID

⑥ android手机怎么保证设备唯一标识符防刷

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。 在Android中,有以下几种方法获取这样的ID。 1. The IMEI: 仅仅只对Android手机有效: TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE 采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。 2. Pseudo-Unique ID, 这个在任何Android手机中都有效 有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类: String m_szDevIDShort = "35" + //we make this look like a valid IMEI Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits 大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。 3. The Android ID , 通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。 ...有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。 在Android中,有以下几种方法获取这样的ID。 1. The IMEI: 仅仅只对Android手机有效: TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE 采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于 359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。 2. Pseudo-Unique ID, 这个在任何Android手机中都有效 有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom 镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类: String m_szDevIDShort = "35" + //we make this look like a valid IMEI Build.BOARD.length()%10+ Build.BRAND.length()%10 + Build.CPU_ABI.length()%10 + Build.DEVICE.length()%10 + Build.DISPLAY.length()%10 + Build.HOST.length()%10 + Build.ID.length()%10 + Build.MANUFACTURER.length()%10 + Build.MODEL.length()%10 + Build.PRODUCT.length()%10 + Build.TAGS.length()%10 + Build.TYPE.length()%10 + Build.USER.length()%10 ; //13 digits 大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。 3. The Android ID , 通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。 String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID); Returns: 9774d56d682e549c . 无需任何许可。 4. The WLAN MAC Address string, 是另一个唯一ID。但是你需要为你的工程加入android.permission.ACCESS_WIFI_STATE 权限,否则这个地址会为null。 WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE); String m_szWLANMAC = wm.getConnectionInfo().getMacAddress(); Returns: 00:11:22:33:44:55 (这不是一个真实的地址。而且这个地址能轻易地被伪造。).WLan不必打开,就可读取些值。 5. The BT MAC Address string, 只在有蓝牙的设备上运行。并且要加入android.permission.BLUETOOTH 权限. BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); String m_szBTMAC = m_BluetoothAdapter.getAddress(); Returns: 43:25:78:50:93:38 . 蓝牙没有必要打开,也能读取。 Combined Device ID 综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。 但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。 String m_szLongID = m_szImei + m_szDevIDShort + m_szAndroidID+ m_szWLANMAC + m_szBTMAC; // compute md5 MessageDigest m = null; try { m = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } m.update(m_szLongID.getBytes(),0,m_szLongID.length()); // get md5 bytes byte p_md5Data[] = m.digest(); // create a hex string String m_szUniqueID = new String(); for (int i=0;i<p_md5Data.length;i++) { int b = (0xFF & p_md5Data[i]); // if it is a single digit, make sure it have 0 in front (proper padding) if (b <= 0xF) m_szUniqueID+="0"; // add number to string m_szUniqueID+=Integer.toHexString(b); } // hex string to uppercase m_szUniqueID = m_szUniqueID.toUpperCase(); 通过以上算法,可产生32位的16进制数据: 现在你就可以对其进行你的应用了。收起

⑦ 如何生成唯一的Android设备ID

Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID。例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID。
范围
本文提供有关如何读取各种Android设备的 ID的介绍,用以使用标识号。本文假定用户已经安装了Android以及开发应用程序必要的工具。并且,本文假定用户已了解Android的基本知识。
简介在搭载Android操作系统的设备中,已经存在好几种类型的设备标识号。先前的所有Android设备都具有电话功能,因此查找每部设备硬件唯一的IMEI,MEID,或ESN也很容易。但仅能使用Wifi的设备或音乐播放器没有电话硬件,所以没有这种类型的唯一标识号。本文阐述了如何读取不同Android设备的标识号。检索Android设备ID各种方式

⑧ 如何获取Android唯一标识

有很多场景和需求你需要用到手机设备的唯一标识符。例如,略。在Android中,有以下几种方法获取这样的ID。1.TheIMEI:仅仅只对Android手机有效:TelephonyManagerTelephonyMgr=(TelephonyManager)getSystemService(TELEPHONY_SERVICE);StringszImei=TelephonyMgr.getDeviceId();//RequiresREAD_PHONE_STATE采用此种方法,需要在AndroidManifest.xml中加入一个许可:android.permission.READ_PHONE_STATE,并且用户应当允许安装此应用。作为手机来讲,IMEI是唯一的,它应该类似于359881030314356(除非你有一个没有量产的手机(水货)它可能有无效的IMEI,如:0000000000000)。2.Pseudo-UniqueID,这个在任何Android手机中都有效有一些特殊的情况,一些如平板电脑的设置没有通话功能,或者你不愿加入READ_PHONE_STATE许可。而你仍然想获得唯一序列号之类的东西。这时你可以通过取出ROM版本、制造商、CPU型号、以及其他硬件信息来实现这一点。这样计算出来的ID不是唯一的(因为如果两个手机应用了同样的硬件以及Rom镜像)。但应当明白的是,出现类似情况的可能性基本可以忽略。要实现这一点,你可以使用Build类:Stringm_szDevIDShort="35"+//.BOARD.length()%10+Build.BRAND.length()%10+Build.CPU_ABI.length()%10+Build.DEVICE.length()%10+Build.DISPLAY.length()%10+Build.HOST.length()%10+Build.ID.length()%10+Build.MANUFACTURER.length()%10+Build.MODEL.length()%10+Build.PRODUCT.length()%10+Build.TAGS.length()%10+Build.TYPE.length()%10+Build.USER.length()%10;//13digits大多数的Build成员都是字符串形式的,我们只取他们的长度信息。我们取到13个数字,并在前面加上“35”。这样这个ID看起来就和15位IMEI一样了。3.TheAndroidID,通常被认为不可信,因为它有时为null。开发文档中说明了:这个ID会改变如果进行了出厂设置。并且,如果某个Andorid手机被Root过的话,这个ID也可以被任意改变。Stringm_szAndroidID=Secure.getString(getContentResolver(),Secure.ANDROID_ID);Returns:9774d56d682e549c.无需任何许可。4.TheWLANMACAddressstring,是另一个唯一ID。但是你需要为你的工程加入android.permission.ACCESS_WIFI_STATE权限,否则这个地址会为null。WifiManagerwm=(WifiManager)getSystemService(Context.WIFI_SERVICE);Stringm_szWLANMAC=wm.getConnectionInfo().getMacAddress();Returns:00:11:22:33:44:55(这不是一个真实的地址。而且这个地址能轻易地被伪造。).WLan不必打开,就可读取些值。5.TheBTMACAddressstring,只在有蓝牙的设备上运行。并且要加入android.permission.BLUETOOTH权限.BluetoothAdapterm_BluetoothAdapter=null;//LocalBluetoothadapterm_BluetoothAdapter=BluetoothAdapter.getDefaultAdapter();Stringm_szBTMAC=m_BluetoothAdapter.getAddress();Returns:43:25:78:50:93:38.蓝牙没有必要打开,也能读取。CombinedDeviceID综上所述,我们一共有五种方式取得设备的唯一标识。它们中的一些可能会返回null,或者由于硬件缺失、权限问题等获取失败。但你总能获得至少一个能用。所以,最好的方法就是通过拼接,或者拼接后的计算出的MD5值来产生一个结果。Stringm_szLongID=m_szImei+m_szDevIDShort+m_szAndroidID+m_szWLANMAC+m_szBTMAC;//computemd5MessageDigestm=null;try{m=MessageDigest.getInstance("MD5");}catch(NoSuchAlgorithmExceptione){e.printStackTrace();}m.update(m_szLongID.getBytes(),0,m_szLongID.length());//getmd5bytesbytep_md5Data[]=m.digest();//createahexstringStringm_szUniqueID=newString();for(inti=0;i

⑨ 如何获取android设备唯一识别码

DEVICE_ID
这是Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且唯一性良好。
这个DEVICE_ID可以同通过下面的方法获取:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String DEVICE_ID = tm.getDeviceId();

它会根据不同的手机设备返回IMEI,MEID或者ESN码,但在使用的过程中有以下问题:
非手机设备:最开始搭载Android系统都手机设备,而现在也出现了非手机设备:如平板电脑、电子书、电视、音乐播放器等。这些设备没有通话的硬件功能,系统中也就没有TELEPHONY_SERVICE,自然也就无法通过上面的方法获得DEVICE_ID。
权限问题:获取DEVICE_ID需要READ_PHONE_STATE权限,如果只是为了获取DEVICE_ID而没有用到其他的通话功能,申请这个权限一来大才小用,二来部分用户会怀疑软件的安全性。
厂商定制系统中的Bug:少数手机设备上,由于该实现有漏洞,会返回垃圾,如:zeros或者asterisks
MAC ADDRESS
可以使用手机Wifi或蓝牙的MAC地址作为设备标识,但是并不推荐这么做,原因有以下两点:
硬件限制:并不是所有的设备都有Wifi和蓝牙硬件,硬件不存在自然也就得不到这一信息。
获取的限制:如果Wifi没有打开过,是无法获取其Mac地址的;而蓝牙是只有在打开的时候才能获取到其Mac地址。
获取Wifi Mac地址:
获取蓝牙 Mac地址:
Sim Serial Number
装有SIM卡的设备,可以通过下面的方法获取到Sim Serial Number:
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String SimSerialNumber = tm.getSimSerialNumber();

注意:对于CDMA设备,返回的是一个空值!
ANDROID_ID
在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。可以通过下面的方法获取:
import android.provider.Settings; String ANDROID_ID = Settings.System.getString(getContentResolver(), Settings.System.ANDROID_ID);

ANDROID_ID可以作为设备标识,但需要注意:
厂商定制系统的Bug:不同的设备可能会产生相同的ANDROID_ID:9774d56d682e549c。
厂商定制系统的Bug:有些设备返回的值为null。
设备差异:对于CDMA设备,ANDROID_ID和TelephonyManager.getDeviceId() 返回相同的值。
Serial Number
Android系统2.3版本以上可以通过下面的方法得到Serial Number,且非手机设备也可以通过该接口获取。
String SerialNumber = android.os.Build.SERIAL;

阅读全文

与android设备唯一标识相关的资料

热点内容
曲式分析基础教程pdf 浏览:14
php生成静态html页面 浏览:964
怎么分割pdf 浏览:812
压缩垃圾报警器 浏览:628
小公司一般都用什么服务器 浏览:967
java获取时间gmt时间 浏览:819
为什么csgo一直连接不到服务器 浏览:503
安卓登ins需要什么 浏览:835
机器人算法的难点 浏览:225
全自动化编程 浏览:725
程序员高薪限制 浏览:692
压缩图片压缩 浏览:75
美国发明解压魔方 浏览:302
电脑怎么备案网上服务器 浏览:514
旅行商问题Python写法 浏览:952
解压破坏王里面的所有兑换码 浏览:860
文件夹如何拖拽还保留原来的 浏览:22
职业生涯pdf 浏览:954
ubuntu安装软件php 浏览:160
黑马程序员退学流程 浏览:362