获取android设备唯一标识

前言:很多时候我们在开发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;
        }
    }

别忘了权限

 

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

你可能感兴趣的:(android小tip)