1.最简单的方式:获取IMEI号
TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String szImei = TelephonyMgr.getDeviceId();
权限<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2.最保险的方式:通过UUID获取
//获得独一无二的Psuedo ID
public static String getUniquePsuedoID() {
String serial = null; String m_szDevIDShort = "35" + 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 位
try {
serial = android.os.Build.class.getField("SERIAL").get(null).toString(); //API>=9 使用serial号
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
} catch (Exception exception) {
//serial需要一个初始化
serial = "serial"; // 随便一个初始化
}
return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
3.为毛其他有局限性:
- 用户手机号:用户可以更改他们的手机号 (非常不可靠)
- Android ID:这个是不靠谱的,因为有时候它是null的,文档中明确说明,如果你恢复了出厂设置,那他就会改变的。而且如果你root了手机,你也可以改变这个ID
String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
它返回的是9774d56d682e549c这样一串东西,倒是不需要什么权限. - WLAN MAC地址:这也可以得到一个独一无二的ID号,返回的是 00:11:22:33:44:55 。但是当没有wifi的时候,我们是无法获得数据的。
- 蓝牙MAC地址:市面上大部分的应用不使用蓝牙,如果你的应用根本没用蓝牙,而你却和用户要了蓝牙权限的,那你很可疑。
网友评论