今天分享点比较基础的东西,别小看这基础的东西,面试时,一个小小的知识点,有时能决定你是否被录用。笔者两年前就因为一个基础错过了一个Offer,深感遗憾。声明,本文讲的知识点过于基础,高手请直接关闭页面。
今天分享的是获取Android设备唯一标识,希望对你有帮助。
1、使用IMEI
public synchronized static String getDeviceId(Context mContext) {
TelephonyManager telephonyManager = (TelephonyManager)mContext.getSystemService(mContext.TELEPHONY_SERVICE);
String deviceId= telephonyManager.getDeviceId();
return deviceId;
}
需要在AndroidManifest.xml加上权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
注意,此方法只对手机有效,对于对讲机那类并不起效,获取不到。
又比如Android 7.0 。
2、MAC Address 使用网卡地址
public synchronized static String getMacAddress(Context mContext) {
WifiManager wm = (WifiManager)mContext.getSystemService(mContext.WIFI_SERVICE);
String macAddress = wm.getConnectionInfo().getMacAddress();
return macAddress ;
}
需要在AndroidManifest.xml加上权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
3、使用蓝牙地址
public synchronized static String getMacId(Context mContext) {
BluetoothAdapter bluetoothAdapter= BluetoothAdapter.getDefaultAdapter();
String mBluethId= bluetoothAdapter.getAddress();
return mBluethId;
}
需要在AndroidManifest.xml加上权限
<uses-permission android:name="android.permission.BLUETOOTH"/>
3、安装ID (Installtion ID)
作为一枚Android开发者,我们都知道Android设备的多样性,考虑到平板没有通话功能,低端设备没有WLAN或者蓝牙功能,亦或是有些用户禁止了应用程序这些需要的权限。通过上面的方法我们就获取不到唯一标识了。下面我们使用Installtion ID,无需权限的方法;这种方式的原理是在程序安装后第一次运行时生成一个ID,该方式和设备唯一标识不一样,不同的应用程序会产生不同的ID,同一个程序重新安装ID也会不同。这不是设备的唯一ID,但是可以保证每个用户的ID是不同的。可以说是用来标识每一份应用程序的唯一ID(Installtion ID),可以用来跟踪应用的安装数量等。
public synchronized static String getUUID(Context mContext) {
if (sID == null) {
File installation = new File(mContext.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();
}
我们也可以考虑把上面获取的几个方法拼接后,计算出的MD5值来产生一个结果,也可以作为唯一的标识用。例如这样:
public static String getLongId(){
String longId ="上面几个方法合并";
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
messageDigest.update(longId.getBytes(),0,longId.length());
byte md5Data[] = messageDigest.digest();
String uniqueId = new String();
for (int i=0;i<md5Data.length;i++) {
int b = (0xFF & md5Data[i]);
if (b <= 0xF) {
uniqueId+="0";
}
uniqueId+=Integer.toHexString(b);
}
return uniqueId.toUpperCase();
}
[END]