安卓获取手机唯一码工具类

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值