Android手机,唯一码,有时候作为手机的唯一标示,要在程序中获取。但安卓手机因为厂家多,等原因,对于所有的安卓手机及pad,没有一个稳定可靠的手机标示码可以100%获得。
本文提供了一个解决方案,imei 、序列号(sn)、安卓号、wifi mac地址等等,一种一种的码去找,直到找到为止。就算最后没有找到,自己生成一个UUID,去标示该手机
废话不说了,直接上代码
package com.zdk.softuk.Utils;
import android.Manifest;
...
import java.util.UUID;
...
/**
* Created by zhangyushui on 2016/11/14.
*/
public class PhoneCodeUtils {
public static String getDeviceId(Context context) {
StringBuilder deviceId = new StringBuilder();
// 渠道标志
//deviceId.append("a");
try {
//IMEI(imei)
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
//动态申请权限,对于安卓6.0及以上的手机
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
//没有权限,申请一下
ActivityCompat.requestPermissions((Activity) context,
new String[]{Manifest.permission.READ_PHONE_STATE},
1);
}
String imei = tm.getDeviceId();
if(!isEmpty(imei)){
//deviceId.append("imei");
deviceId.append(imei);
Log.e("getDeviceId : ", deviceId.toString());
return deviceId.toString();
}
//序列号(sn)
String sn = tm.getSimSerialNumber();
if(!isEmpty(sn)){
//deviceId.append("sn");
deviceId.append(sn);
Log.e("getDeviceId : ", deviceId.toString());
return deviceId.toString();
}
//安卓号
String ANDROID_ID = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
if (!isEmpty(ANDROID_ID)) {
return ANDROID_ID;
}
//wifi mac地址
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String wifiMac = info.getMacAddress();
if(!isEmpty(wifiMac)){
//deviceId.append("wifi");
deviceId.append(wifiMac);
Log.e("getDeviceId : ", deviceId.toString());
return deviceId.toString();
}
//如果上面都没有, 则生成一个id:随机码
String uuid = getUUID(context);
if(!isEmpty(uuid)){
deviceId.append("uuid");
deviceId.append(uuid);
Log.e("getDeviceId : ", deviceId.toString());
return deviceId.toString();
}
} catch (Exception e) {
e.printStackTrace();
deviceId.append("id").append(getUUID(context));
}
Log.e("getDeviceId : ", deviceId.toString());
return deviceId.toString();
}
/**
* 得到全局唯一UUID
*/
public static String getUUID(Context context){
String uuid = SpUtils.getString(context, "uuid","");;
if(isEmpty(uuid)){
uuid = UUID.randomUUID().toString();
SpUtils.saveValue(context, "uuid", uuid);
}
Log.e("UUID", "getUUID : " + uuid);
return uuid;
}
}
SpUtils的代码也贴出来吧
package com.zdk.softuk;
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by 张玉水 on 2016/6/30.
*/
public class SpUtils {
/**
* 向config中存储boolean型数据
*
* @param context 上下文
* @param name 数据key
* @param valueboolean 数据value
*/
public static void saveValue(Context context, String name, Boolean valueboolean) {
context.getSharedPreferences("config", Context.MODE_PRIVATE)
.edit()
.putBoolean(name, valueboolean)
.commit();
}
/**
* 向config中存储int型数据
*
* @param context 上下文
* @param name 数据key
*/
public static void saveValue(Context context, String name, int valueint) {
context.getSharedPreferences("config", Context.MODE_PRIVATE)
.edit()
.putInt(name, valueint)
.commit();
}
/**
* 向config中存储string型数据
*
* @param context 上下文
* @param name 数据key
*/
public static void saveValue(Context context, String name, String valuestring) {
context.getSharedPreferences("config", Context.MODE_PRIVATE)
.edit()
.putString(name, valuestring)
.commit();
}
/**
* 从config中得到boolean型数据
*
* @param context 上下文
* @param name 数据key
* @param defValue 默认boolean值
*/
public static Boolean getBoolean(Context context, String name, Boolean defValue) {
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getBoolean(name, defValue);
}
/**
* 从config中得到int型数据
*
* @param context 上下文
* @param name 数据key
*/
public static int getInt(Context context, String name) {
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getInt(name, 0);
}
/**
* 从config中得到string型数据
*
* @param context
* @param name
* @return
*/
public static String getString(Context context, String name) {
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getString(name, "");
}
public static String getString(Context context, String name, String defortString) {
return context.getSharedPreferences("config", Context.MODE_PRIVATE).getString(name, defortString);
}
public static void delKeyValue(Context context, String key) {
SharedPreferences sp = context.getSharedPreferences("config", Context.MODE_PRIVATE);
sp.edit().remove(key).commit();
}
}