当前位置:首页 » 安卓系统 » android手机标识

android手机标识

发布时间: 2022-08-11 13:46:50

❶ 如何获取Android唯一标识

我刚好做过这方面的研究,直接拿我之前做过的笔记了,欢迎关注、采纳、持续交流Andorid问题

一共有 五大方法:(推荐第五种)

1.设备ID(DEVICE_ID)

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

  • l获取方法

java">TelephonyManagertm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
StringDEVICE_ID=tm.getDeviceId();
  • l注意点:

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

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

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

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

2. SIM卡序列号

不同SIM卡的序列号不同

  • l获取办法

TelephonyManagertm=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
StringsimSerialNum=tm.getSimSerialNumber();
  • l注意点

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

也需要 READ_PHONE_STATE 权限。


3. 设备序列号(SERIAL)

  • l获取办法

StringserialNum=android.os.Build.SERIAL;
  • l注意点

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

Android系统2.3版本以上

4. ANDROID_ID

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

  • l获取办法

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

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

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

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

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

publicclassInstallation{
privatestaticStringsID=null;
="INSTALLATION";

(Contextcontext){
if(sID==null){
Fileinstallation=newFile(context.getFilesDir(),INSTALLATION);
try{
if(!installation.exists())writeInstallationFile(installation);
sID=readInstallationFile(installation);
}catch(Exceptione){
thrownewRuntimeException(e);
}
}
returnsID;
}

(Fileinstallation)throwsIOException{
RandomAccessFilef=newRandomAccessFile(installation,"r");
byte[]bytes=newbyte[(int)f.length()];
f.readFully(bytes);
f.close();
returnnewString(bytes);
}

(Fileinstallation)throwsIOException{
FileOutputStreamout=newFileOutputStream(installation);
Stringid=UUID.randomUUID().toString();
out.write(id.getBytes());
out.close();
}
}

❷ 如何获取Android唯一标识

获取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唯一标识

在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)。

❹ android是不是华为手机

华为手机属于安卓系列,推荐一款华为 P40 Pro挺不错的,手机参数如下:
1、屏幕:屏幕尺寸为6.58英寸,屏幕色彩1670万色,分辨率:2640 × 1200 像素,四曲面满溢屏,滑动舒适不咯手,没有边框更高级!
2、拍照:后置摄像头:超感知徕卡四摄:5000万像素超感知摄像头(广角, f/1.9光圈,OIS光学防抖) +4000万像素电影摄像头(超广角,f/1.8光圈) +1200万像素超感光长焦摄像头(f/3.4 光圈,OIS光学防抖) +3D深感摄像头,前置摄像头:3200万像素摄像头(f/2.2光圈,自动对焦)+景深摄像头。无论是白天黑夜、顺光逆光,拍人拍景都能媲美专业相机。
3、性能:采用EMUI 10.1(基于Android 10)系统,搭载HUAWEI Kirin 990 5G(麒麟990 5G)八核处理器,性能更强,功耗更低;WiFi6+,速度最快。
4、电池:电池容量:4200mAh(典型值),标配充电器支持10V/4A或9V/2A或5V/2A输出,手机支持最大10V/4A超级快充,兼容4.5V/5A或5V/4.5A超级快充,兼容9V/2A快充,手机支持27W华为无线超级快充,支持无线反向充电,续航持久,使用更安心。

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

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

❻ 如何获取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也可以被任意改变。

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++) p="" {
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唯一标识

Android唯一标识就是IMEI硬件ID,java获得android的imei号步骤:
1、权限添加:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

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

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

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

❽ 如何获取Android唯一标识

在Android中,有以下几种方法获取这样的ID。
1. The IMEI: 仅仅只对Android手机有效:
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId();
采用此种方法,需要在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一样了。

热点内容
服务器在线访问数由什么决定 发布:2024-05-06 11:39:15 浏览:677
途观21款哪个配置值得买 发布:2024-05-06 11:29:00 浏览:91
pythonspyder 发布:2024-05-06 11:15:53 浏览:165
线上服务器如何资源监控 发布:2024-05-06 11:15:07 浏览:298
页游脚本检测 发布:2024-05-06 11:05:05 浏览:924
七七网源码 发布:2024-05-06 10:27:36 浏览:295
shell输入脚本 发布:2024-05-06 10:19:49 浏览:985
通达信自定义板块在哪个文件夹 发布:2024-05-06 09:56:37 浏览:104
在linux搭建mqtt服务器搭建 发布:2024-05-06 09:52:00 浏览:559
windowspython23 发布:2024-05-06 09:27:50 浏览:748