如何获取Android唯一标识

作者&投稿:超妮 (若有异议请与网页底部的电邮联系)
如何获取Android唯一标识~

Android唯一标识就是IMEI硬件ID,java获得android的imei号步骤:
1、权限添加:


2、调用android的api
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String IMEI = telephonyManager.getDeviceId();

3、adb命令获得:
adb shell dumpsys iphonesubinfo


4、任何手机都可以在拨打电话的界面输入*#06# 来查看IMEI。

如果我不jar包不做这样的认证,假如开发者做了一个违法的软件,在他的apk里用了我的jar包,那我同样是要负法律责任的。

  获取Android唯一标识的具体操作步骤:
DEVICE_ID
  假设确实需要用到真实设备的标识,可能就需要用到DEVICE_ID。在以前,Android设备是手机,这个DEVICE_ID可以同
  通过TelephonyManager.getDeviceId()获取,它根据不同的手机设备返回IMEI,MEID或者ESN码,但它在使用的过程中
  会遇到很多问题:

  非手机设备: 如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个DEVICE_ID
  权限: 获取DEVICE_ID需要READ_PHONE_STATE权限,如果只为了获取它,没有用到其它的通话功能,那这个权限有点大才小用
  bug:在少数的一些手机设备上,该实现有漏洞,会返回垃圾,如:zeros或者asterisks的产品。

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

  3. Serial Number
  在Android 2.3可以通过android.os.Build.SERIAL获取,非手机设备可以通过该接口获取。
  4. ANDROID_ID
  ANDROID_ID是设备第一次启动时产生和存储的64bit的一个数,当设备被wipe后该数重置

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

  它在Android <=2.1 or Android >=2.3的版本是可靠、稳定的,但在2.2的版本并不是100%可靠的
  在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID:9774d56d682e549c

  5. Installtion ID : UUID

有很多场景和需求你需要用到手机设备的唯一标识符。
在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进制数据:
9DDDF85AFF0A87974CE4541BD94D5F55
现在你就可以对其进行你的应用了。

有很多场景和需求需要用到手机设备的唯一标识符。例如,略。
在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进制数据:
9DDDF85AFF0A87974CE4541BD94D5F55
现在就可以对其进行的应用了。


北斗华为手机是否真的存在,怎么感觉骗人的??求大神解析!
北斗华为手机真的存在,不是骗人的。华为海思很早就支持了北斗,从麒麟930开始集成的Hi1101四合一芯片可以同时接收GPS、北斗和GLonass三种信号。北斗信号的获取主要取决于手机处理器(SOC)中集成的定位芯片,目前大多SOC都能同时支持GPS、北斗和GlONASS。高通骁龙800、600、400系列,其中目前常见的820、821、...

如何知道手机是否支持北斗导航
北斗导航服务,怎样知道自己手机是否支持?打开手机来看看

现在的手机一般是用北斗还是GPS
从麒麟930开始,集成的Hi1101四合一芯片可以同时接收GPS、北斗和GLonass三种信号。也就是说,除了任性的苹果,采用这些SOC的华为、O&V、小米、一加、魅族、HTC、努比亚等品牌的大部分型号手机都支持北斗定位!不信的话可以给你的手机装个测试软件试试,比如“GPS状态”、“北斗伴”、“AndroiTS GPS Test...

Androi开发,应用程序需要往\/data\/local\/tmp\/内写入数据,权限不够,怎 ...
that the file has executable permission.总的来说,如果要动态释放so或者sh然后执行,解决方案是不在\/data\/local\/tmp中释放,而放到getContext().getFilesDir()获取到的\/data\/data\/${your.package}目录中执行,记得释放后手工加上运行权限 我是刚刚遇到这个问题搜索到这里的,贴在这里方便后来人 ...

小米手机导航总是显示GpS信号弱怎么办?
地理位置偏僻,运营商设置的基站离您太远,这会影响到您手机的信号;手机配置较低,接收信号的性能弱;高楼大厦造成遮挡等。具体地:1、我们要了解GPS卫星本身是微波传输,这就决定了它很容易被阻挡。而且从几万公里以外的太空传来,据说只有普通无线电广播信号的二十分之一不到,所以生活中一些常见的...

当vivo手机出现funtouchos时,该怎么办?
.vivo手机锁屏时有新消息通知屏幕不会亮的解决方法 vivo手机锁屏时有新消息通知屏幕不会亮的解决方法。vivo手机锁屏时有新消息通知屏幕不会亮的解...Android版即刻app使用技巧 Android版即刻app使用技巧。最近热门,不同的时间点进入,最近热门的内容不同。Androi...移动互联网时代信息获取app推荐:即 ...

...获取了root.不小心删错了系统软件.,现在提示,进程.comandroi...
这个没办法,如果删除软件有回收站的话,恢复一下就行了,没有的话就得刷机,拿去手机店也行,自己刷也行

安卓手机如何通过数据线连电脑上网?
安卓手机USB数据线连接电脑宽带上网方法如下: 一、准备工作 1.在电脑端安装好与手机型号相匹配的驱动程序(这个一般买手机时都自带有,实在不会可以使用腾讯手机管家PC版自动获取); 2.在手机端下载安装两个Android与电脑联网必须的软件:GScript和BusyBox. 3.安卓手机必须具有root权限,没有root的手机是...

华为p9手机能用北斗导航吗
详情请查看视频回答

电脑有没有ios模拟器
电脑没有ios模拟器。网上有IOS模拟器PC版,但是这个是IOS的SDK开发者方便在WINDOWS环境里开发调试IOS应用的,不是用这个模拟器就能直接安装IOS的应用或者游戏来玩了,这个直接运行不了,必须是源代码才能运行。

师宗县19364637686: 如何获取Android唯一标识 -
贠宜敬柱: 在Android中,有以下几种方法获取这样的ID.1. The IMEI: 仅仅只对Android手机有效:TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);String szImei = TelephonyMgr.getDeviceId(); // ...

师宗县19364637686: 如何获取Android设备唯一识别码 -
贠宜敬柱: 可以参考如下内容,获取唯一识别码: Device ID 唯一的设备ID,如GSM网络的IMEI,CDMA网络的MEID / ESN,可能返回null(API文档的描述) 只对手机设备有效,对于不在手机网络的设备,会返回null 获取到的Device ID值,即使设备恢复出厂设置也不会改变 需要READ_PHONE_STATE权限 某些设备的Device ID实现有bug,会返回0或* TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String deviceId = tm.getDeviceId();

师宗县19364637686: Android如何获取到唯一的设备ID??? -
贠宜敬柱: 如果你想要得到设备本身的唯一值, TM.getDeviceId()应该是足够了.不过显然的,有些用户比其他人更加偏执一些,可以将这些标识中的一个或者多个进行hash运算就很有用,生成的字符串仍然可以唯一标识该设备,但是不会明确的标识实际的设备.例如,使用String.hashCode(),再加上一个UUID,这里有详细的代码》》

师宗县19364637686: android怎么获取APP的唯一标识applicationId -
贠宜敬柱: 如果我不jar包不做这样的认证,假如开发者做了一个违法的软件,在他的apk里用了我的jar包,那我同样是要负法律责任的. 查看原帖>>

师宗县19364637686: 如何获取 android device id
贠宜敬柱: 因为在工作中要统计一些用户的数据,以及爱好等等..所以就要统计不同用户!所以刚开始用device id 如下:/** Java代码 * 获取机器唯一标识 * @param _context * @return */ public String getLocaldeviceId(Context _context){ TelephonyManager ...

师宗县19364637686: android 用什么做唯一标识 -
贠宜敬柱: IMEI+cpu型号+其他不易改变的硬件编号就可以了,总之呢最好用一些容易获得且不易改变的编号还标记

师宗县19364637686: 如何检索Android设备的唯一ID -
贠宜敬柱: 方法步骤(以安卓5.0为例)一、依次点击 设定---关于设备---状态.二、现在可以看到安卓设备的IMEI(国际移动设备识别码)唯一编号.三、或者用手机的拨号键盘输入*#06# 可以弹出IMEI

师宗县19364637686: Android获取设备唯一ID的几种方式 -
贠宜敬柱: 1. The IMEI: 仅仅只对Android手机有效: TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE采用此种方法...

师宗县19364637686: 如何获取Android apk程序的唯一标识 -
贠宜敬柱: String DEVICE_ID = tmTelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE).getDeviceId()

师宗县19364637686: 如何生成唯一的Android设备ID -
贠宜敬柱: Android的开发者在一些特定情况下都需要知道手机中的唯一设备ID.例如,跟踪应用程序的安装,生成用于复制保护的DRM时需要使用设备的唯一ID.范围本文提供有关如何读取各种Android设备的 ID的介绍,用以使用标识号.本文假定用户...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网