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();
|
SharedPreferences.Editor _e = _sp.edit();
|
_e.putString(StaticDefine.LS_KEY_IMEI, _deviceId);
|
_e.apply();
|
return _deviceId;
|
}
|
return "";
|
}
|
|
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();
|
}
|
}
|