前言:很多时候我们在开发app的时候,可能会遇到获取android唯一标识的需求,比如后台统计,区分设备,推送之类
1、IMEI
IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写。俗称“手机串号”、“手机串码”、“手机序列号”,用于在GSM移动网络中识别每一部独立的手机,相当于手机的身份证号码。(百度百科摘过来的,有兴趣的可以详细看看定义)
总的来说,imei码是唯一码不错的选择,
IMSI码:为了在无线路径和整个GSM移动通信网上正确地识别某个移动客户,就必须给移动客户分配一个特定的识别码。这个识别码称为国际移动客户识别码(IMSI),用于GSM移动通信网所有信令中,存储在客户识别模块(SIM)、HLR、VLR中。
/**
* 获取设备imei、imsi码
*
* @param context
* @param name imei 或者imsi
* @return
*/
public static String getEI_SI(String name, Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
@SuppressLint("MissingPermission") String imei = tm.getDeviceId();
@SuppressLint("MissingPermission") String imsi = tm.getSubscriberId();
if (name.equals("imei")) {
return imei;
} else if (name.equals("imsi")) {
return imsi;
} else {
return "imei=" + imei + "\n" + "imsi=" + imsi;
}
}
别忘了权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2、android_id
是一串64位的编码(十六进制的字符串),是随机生成的设备的第一个引导,其记录着一个固定值,通过它可以知道设备的寿命(在设备恢复出厂设置后,该值可能会改变)。 ANDROID_ID也可视为作为唯一设备标识号的一个好选择。
刷机、双清、恢复出厂设置会发生变化
/**
* 获取android_id
* @param context
* @return
*/
public static String getAndroidId(Context context) {
String androidId = ""
+ android.provider.Settings.Secure.getString(
context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
return androidId;
}
相比IMEI、IMSI码,android_id的优点是不需要权限就可以获取到
3、顺便贴下获取分辨率、手机型号、手机厂商、手机号的代码
package com.test.device.deviceutil.util;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.util.DisplayMetrics;
/**
* Created by zyy on 2018/9/6.
*/
public class DeviceMessageUtil {
/**
* 获取分辨率
*
* @param context
* @return
*/
public static String getResolution(Activity context) {
//若不在activity类中调用则参考如下注释代码
//DisplayMetrics dm2 = Context.getResources().getDisplayMetrics();
//System.out.println("heigth2 : " + dm2.heightPixels);
//System.out.println("width2 : " + dm2.widthPixels);
DisplayMetrics metrics = new DisplayMetrics();
context.getWindowManager().getDefaultDisplay().getMetrics(metrics);
int width = metrics.widthPixels;
int height = metrics.heightPixels;
return "分辨率为" + width + "*" + height;
}
/**
* 获取设备厂商
*
* @return
*/
public static String getBrand() {
return Build.BRAND;
}
/**
* 获取设备名称
*
* @return
*/
public static String getDeviceName() {
return Build.MODEL;
}
/**
* 获取设备imei、imsi码
*
* @param context
* @param name imei 或者imsi
* @return
*/
public static String getEI_SI(String name, Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
@SuppressLint("MissingPermission") String imei = tm.getDeviceId();
@SuppressLint("MissingPermission") String imsi = tm.getSubscriberId();
if (name.equals("imei")) {
return imei;
} else if (name.equals("imsi")) {
return imsi;
} else {
return "imei=" + imei + "\n" + "imsi=" + imsi;
}
}
/**
* 获取卡1手机号
* @param context
* @return
*/
public static String getCard1Number(Context context){
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
@SuppressLint("MissingPermission") String phoneN = tm.getLine1Number();
return phoneN;
}
/**
* 获取android_id
* @param context
* @return
*/
public static String getAndroidId(Context context) {
String androidId = ""
+ android.provider.Settings.Secure.getString(
context.getContentResolver(),
android.provider.Settings.Secure.ANDROID_ID);
return androidId;
}
}
需要demo的同学传送阵https://github.com/zhangyuyan62435/DeviceMessage