登录不老阁

 
注册成功

二呆

diamond@tongleer.com

岂能尽如人意,但求无愧我心。

【Android】实战开发之获取设备各种唯一识别码的工具类

2017-6-11 二呆 Android 1176观看

Android实战开发中注册一系列功能可能会用到设备的唯一识别码,包括:设备IMEI Device ID、PseudoUniqueId、Google Android ID、Sim Serial Number、Wlan中的MAC地址、蓝牙中的MAC地址、用MD5加密的唯一设备识别号ID、用UUID加密的唯一设备识别号ID,其他的不多说直接分享工具类。

import java.util.UUID;
import android.bluetooth.BluetoothAdapter;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.provider.Settings.Secure;
import android.telephony.TelephonyManager;
/**
 * 获取设备各种唯一识别码的工具类
 * @author tongleer.com
 *
 */
public class DeviceUtil {
    /**
     * 获得设备IMEI Device ID,需要权限READ_PHONE_STATE
     * @param context
     * @return
     */
    public static String getIMEIDeviceId(Context context){
        TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        return telephonyManager.getDeviceId();
    }
    /**
     * 获得PseudoUniqueId,此ID在任何Android手机中都有效,
     * 但如果两个手机应用了同样的硬件以及Rom镜像(ROM版本、制造商、CPU型号、以及其他硬件信息),那计算的ID就不是唯一的,出现此类情况一般可以忽略。
     * @return
     */
    public static String getPseudoUniqueId(){
        //Build.CPU_ABI过时用Build.SUPPORTED_ABIS代替,不过需要API21
        return "35" +
        Build.BOARD.length()%10 +
        Build.BRAND.length()%10 +
        Build.CPU_ABI.length()%10 +
        Build.DEVICE.length()%10 +
        Build.DISPLAY.length()%10 +
        Build.HOST.length()%10 +
        Build.ID.length()%10 +
        Build.MANUFACTURER.length()%10 +
        Build.MODEL.length()%10 +
        Build.PRODUCT.length()%10 +
        Build.TAGS.length()%10 +
        Build.TYPE.length()%10 +
        Build.USER.length()%10 ;
    }
    /**
     * 获得Google Android ID
     * @param context
     * @return
     */
    public static String getAndroidId(Context context){
        return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
    }
    /**
     * 获得Sim Serial Number
     * @param context
     * @return
     */
    public static String getSimSerialNumber(Context context){
        //装有SIM卡的设备的获取方式,但对于CDMA设备返回空值
        TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
        String simSerialNumber = telephonyManager.getSimSerialNumber();
        if(simSerialNumber==null){
            //Android 2.3设备的获取方式
            String serialNumber = Build.SERIAL;
            if(serialNumber!=null){
                simSerialNumber=serialNumber;
            }
        }
        return simSerialNumber;
    }
    /**
     * 获得Wlan中的MAC地址,需要权限ACCESS_WIFI_STATE
     * @param context
     * @return
     */
    public static String getWlanMACAddress(Context context){
        WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        return wifiManager.getConnectionInfo().getMacAddress();
    }
    /**
     * 获得蓝牙中的MAC地址,需要权限BLUETOOTH
     * @param context
     * @return
     */
    public static String getBTMACAddress(Context context){
        BluetoothAdapter bluetoothAdapter = null;
        bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        return bluetoothAdapter.getAddress();
    }
    /**
     * 获得用MD5加密的唯一设备识别号ID
     * @param context
     * @return
     */
    public static String toMD5UniqueId(Context context){
        return MD5Util.getStringMD5(
            getIMEIDeviceId(context)+
            getPseudoUniqueId()+
            getAndroidId(context)+
            getSimSerialNumber(context)+
            getWlanMACAddress(context)+
            getBTMACAddress(context)
        );
    }
    /**
     * 获得用UUID加密的唯一设备识别号ID
     * @param context
     * @return
     */
    public static String toUUIDUniqueId(Context context){
        UUID deviceUuid = new UUID(
            getAndroidId(context).hashCode(),
            ((long)getIMEIDeviceId(context).hashCode() << 32) | getSimSerialNumber(context).hashCode()
        );
        return deviceUuid.toString();
    }
}

标签: Android 工具类 Android实战开发 唯一识别码

« 【Android】实战开发之锁屏Activity实现步骤清晰简述 | 【Android】实战开发之ViewPager+Fragment预加载问题完美解决»

  • 觉得很赞 (0)
  • 打赏
  • X
    打赏
    • 微信
    • QQ红包
    • 支付宝


    用微信扫一扫

    您的鼓励将是站长及作者前行的动力,谢谢打赏
    (若二维码有误可举报)

发表评论:

快乐贰呆的关注更多 >

小草窝博客

博主是一名天朝的学生,喜欢折腾各种奇怪的语言,喜欢探索未知的事情

图床

将图片拖拽到此上传

标签

Genymotion Button HTML 腾讯视频 Win10 火腿肠意面 MIUI 主题编辑器 Android emlog pjax EventBus AndroidStudio 快捷键 倒计时 工具类 eclipse javascript 励志语录 自定义Dialog Demo java 热伤风 redis RabbitMQ ZeroMQ ActiveMQ Kafka Jafka php 鸡蛋饼 直播 继承 面向对象 工厂模式 AutoCompleteTextView GridView RadioButton ToggleButton Android开发入门 EditText CheckBoxes 控件 TimePicker AnalogClock DigitalClock ProgressBar SeekBar RatingBar UI控件 Spinner ScrollView Adapter 单元测试 Dialog 自定义对话框 Android项目 布局 Android视频 Java4Android Android开发教程 学习札记 基本数据类型 运算符和流程控制 流程控制循环语句 数组 数组二 二维数组 安卓基础 安卓监听器 表格布局 帧布局 网格布局 Android异常 AndroidIO XML XML解析 用户登录 数据存储 SQLite内部数据存储 Unity3D教程 Linux subversionSVN TortoiseSVN ViewPager Fragment 预加载 Android实战开发 唯一识别码 锁屏 Activity CheckBox ListView 增删改查 图片回收处理 内存溢出 仿2列商品列表 AndroidNDK eclipse插件 jni开发 jni调用 so文件 Androidmk配置 Flash 绘制图形 苹果 图标 变形工具 滤镜 Flash特效 简单薄餐 Flash滤镜 Flash动画 Android开发 天气预报 醋溜白菜 香菇烩豆腐 微波豆腐蒸蛋 速成凉拌豆腐 杜子建 穷根 男装搭配 黄帝内经 大蒜洋葱粥 情商密码 中华药粥 交际红人 小白菜萝卜粥 每日一笑 完美国际 故梦 一卷情长 Ukulele 白熊音乐 零基础 指弹 教程 白桦树娃娃 新加坡 网红美食 海南鸡饭

公众号

同乐儿