package com.secondworld.univeralsdk; import android.Manifest; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.provider.Settings; import android.support.v4.content.ContextCompat; import android.telephony.TelephonyManager; import android.util.Log; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.Reader; import java.io.Writer; import java.net.NetworkInterface; import java.net.SocketException; import java.security.MessageDigest; import java.util.UUID; /** * Created by Administrator on 2018/7/12 0012. */ public class UniqueID { public static String get(Context context) { String _id = read(context); if (_id != null && !_id.equals("")) { return _id; } StringBuffer _buffer = new StringBuffer(); _id = getDeviceId(context); _buffer.append(_id); _id = getLocalMac(context).replace(":", ""); _buffer.append(_id); if (_buffer == null || _buffer.length() <= 0) { UUID _uuid = UUID.randomUUID(); _id = _uuid.toString().replace("-", ""); _buffer.append(_id); } _id = getMD5(_buffer.toString(), false); if (_id.length() > 0) { save(_id, context); } return _id; } private static String read(Context context) { File _file = new File(context.getExternalFilesDir(""), "/tsw_device_unique_id.txt"); if (!_file.exists()) { return null; } StringBuffer _buffer = new StringBuffer(); try { FileInputStream _fis = new FileInputStream(_file); InputStreamReader _isr = new InputStreamReader(_fis, "UTF-8"); Reader _in = new BufferedReader(_isr); int _index; while ((_index = _in.read()) > -1) { _buffer.append((char) _index); } _in.close(); return _buffer.toString(); } catch (IOException e) { e.printStackTrace(); } return null; } private static void save(String id, Context context) { File _file = new File(context.getExternalFilesDir(""), "/tsw_device_unique_id.txt"); try { Log.i("UniqueIDUtil", "path: " + _file.getAbsolutePath()); FileOutputStream _fos = new FileOutputStream(_file); Writer _writer = new OutputStreamWriter(_fos, "UTF-8"); _writer.write(id); _writer.close(); _fos.close(); } catch (IOException e) { e.printStackTrace(); } } public static String getAndroidID(Context context) { return Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID); } public static String getDeviceId(Context context) { SharedPreferences _sp = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); String _deviceId = _sp.getString(StaticDefine.LS_KEY_IMEI, ""); if (!_deviceId.equals("")) { return _deviceId; } TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { _deviceId = tm.getDeviceId(); } else { _deviceId = get(context); } if (_deviceId.length() != 0) { SharedPreferences.Editor _e = _sp.edit(); _e.putString(StaticDefine.LS_KEY_IMEI, _deviceId); _e.apply(); } return _deviceId; } public static String getLocalMac(Context context) { SharedPreferences _sp = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); String _macAddress = _sp.getString(StaticDefine.LS_KEY_MAC, ""); if (!_macAddress.equals("")) { return _macAddress; } StringBuffer _buffer = new StringBuffer(); NetworkInterface _networkInterface; try { _networkInterface = NetworkInterface.getByName("eth1"); if (_networkInterface == null) { _networkInterface = NetworkInterface.getByName("wlan0"); } if (_networkInterface == null) { return ""; } byte[] _addresses = _networkInterface.getHardwareAddress(); for (byte b : _addresses) { _buffer.append(String.format("%02X:", b)); } if (_buffer.length() > 0) { _buffer.deleteCharAt(_buffer.length() - 1); } _macAddress = _buffer.toString(); SharedPreferences.Editor _e = _sp.edit(); _e.putString(StaticDefine.LS_KEY_MAC, _macAddress); _e.apply(); } catch (SocketException e) { e.printStackTrace(); return ""; } return _macAddress; } public static String getMD5(String message, boolean upperCase) { String md5str = ""; try { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] input = message.getBytes(); byte[] buff = md.digest(input); md5str = bytesToHex(buff, upperCase); } catch (Exception e) { e.printStackTrace(); } return md5str; } private static String bytesToHex(byte[] bytes, boolean upperCase) { StringBuffer md5str = new StringBuffer(); int digital; for (int i = 0; i < bytes.length; i++) { digital = bytes[i]; if (digital < 0) { digital += 256; } if (digital < 16) { md5str.append("0"); } md5str.append(Integer.toHexString(digital)); } if (upperCase) { return md5str.toString().toUpperCase(); } return md5str.toString().toLowerCase(); } }