1. IMEI
<u>不建議獲取IMEI碼, 此碼其實是對應(yīng)sim卡的, 而某些安卓設(shè)備可能沒有sim卡, 而另一些可能雙卡雙待有兩個sim卡</u>
2. WLAN MAC Address
使用wifi的物理地址來作為識別碼, 每個設(shè)備都可以使用, 而且每個設(shè)備都不一樣
使用方法:
WifiManager m_wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
String m_wlanMacAdd = m_wm.getConnectionInfo().getMacAddress();
權(quán)限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
2.1 android 6.x 以上物理地址獲取失敗
參考:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
wifi 和藍(lán)牙會返回 02:00:00:00:00:00
參考:
1.貌似是吵得 少了個函數(shù):
http://blog.csdn.net/randyjiawenjie/article/details/6589489
- 這個是全的, 不知道是否是原作者:
http://blog.csdn.net/andoop/article/details/54633077
3.獲取安卓系統(tǒng)版本, 順便一提.SDK(string)已經(jīng)過時, 使用.SDK_INT(int)替代
https://stackoverflow.com/questions/3093365/how-can-i-check-the-system-version-of-android
我經(jīng)過改良了一下, 原代碼判斷不成立
//獲取wifi mac地址
public static String getMacAddress(Context context) {
//該方法在6.0 系統(tǒng) 不再開發(fā),返回 02:00:00:00:00:00
if (isUnderAndroid6()) {
WifiManager wifiMgr = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
return wifiInfo.getMacAddress();
}
String macAddress = null;
StringBuffer buf = new StringBuffer();
NetworkInterface networkInterface = null;
try {
networkInterface = NetworkInterface.getByName("wlan0");
if (networkInterface == null) {
networkInterface = NetworkInterface.getByName("eth1");
}
if (networkInterface == null) {
return "02:00:00:00:00:02";
}
byte[] addr = networkInterface.getHardwareAddress();
for (byte b : addr) {
buf.append(String.format("%02X:", b));
}
if (buf.length() > 0) {
buf.deleteCharAt(buf.length() - 1);
}
macAddress = buf.toString();
} catch (SocketException e) {
e.printStackTrace();
return "02:00:00:00:00:02";
}
return macAddress;
}
//檢測系統(tǒng)是否低于android6.0
private static boolean isUnderAndroid6() {
Log.i("debug","sdk version:"+android.os.Build.VERSION.SDK_INT);
if (android.os.Build.VERSION.SDK_INT<=23) {
//Log.e("----->" + "NetInfoManager", "isAccessWifiStateAuthorized:" + "access wifi state is enabled");
return true;
} else
return false;
}
2.2 md5加密
獲取唯一碼有時候需要md5來生成特征碼:
結(jié)合了作者和樓下的評論合并:
http://blog.csdn.net/randyjiawenjie/article/details/6589489
md5在線校驗網(wǎng)站: https://md5jiami.51240.com/
//加密 md5 32位 小寫
public static String MD5It(String str){
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
if(md5!=null){
md5.update(str.getBytes());
BigInteger mBInteger = new BigInteger(1, md5.digest());
return mBInteger.toString(16);
}
return str;
}