1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 获取android设备唯一编号_详解Android获取设备唯一ID的几种方式

获取android设备唯一编号_详解Android获取设备唯一ID的几种方式

时间:2022-01-14 21:39:12

相关推荐

获取android设备唯一编号_详解Android获取设备唯一ID的几种方式

先来看看几种比较单一的方式:

IMEI

方式:TelephonyManager.getDeviceId():

问题

范围:只能支持拥有通话功能的设备,对于平板不可以。

持久性:返厂,数据擦除的时候不彻底,保留了原来的标识。

权限:需要权限:Android.permission.READ_PHONE_STATE

bug: 有些厂家的实现有bug,返回一些不可用的数据

Mac地址

ACCESS_WIFI_STATE权限

有些设备没有WiFi,或者蓝牙,就不可以,如果WiFi没有打开,硬件也不会返回Mac地址,不建议使用

ANDROID_ID

2.2(Froyo,8)版本系统会不可信,来自主要生产厂商的主流手机,至少有一个普遍发现的bug,这些有问题的手机相同的ANDROID_ID: 9774d56d682e549c

但是如果返厂的手机,或者被root的手机,可能会变

Serial Number

从Android 2.3 (“Gingerbread”)开始可用,可以通过android.os.Build.SERIAL获取,对于没有通话功能的设备,它会返回一个唯一的device ID,

以下几个是stackoverflow上评论较多的几个,没贴完,还有其他,综合的,用到以上的部分方式:

有兴趣的朋友可以再仔细看看

支持率比较高的(支持票数157):androidID --> 剔除2.2版本(API 8)中有问题的手机,使用UUID替代

import android.content.Context;

import android.content.SharedPreferences;

import android.provider.Settings.Secure;

import android.telephony.TelephonyManager;

import java.io.UnsupportedEncodingException;

import java.util.UUID;

public class DeviceUuidFactory {

protected static final String PREFS_FILE = "device_id.xml";

protected static final String PREFS_DEVICE_ID = "device_id";

protected static volatile UUID uuid;

public DeviceUuidFactory(Context context) {

if (uuid == null) {

synchronized (DeviceUuidFactory.class) {

if (uuid == null) {

final SharedPreferences prefs = context

.getSharedPreferences(PREFS_FILE, 0);

final String id = prefs.getString(PREFS_DEVICE_ID, null);

if (id != null) {

// Use the ids previously computed and stored in the

// prefs file

uuid = UUID.fromString(id);

} else {

final String androidId = Secure.getString(

context.getContentResolve

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。