diff --git a/bellolibrary/src/main/java/me/bello/bellolibrary/Utils/DeviceUtils.java b/bellolibrary/src/main/java/me/bello/bellolibrary/Utils/DeviceUtils.java index 7d2918a..8c7bcd5 100755 --- a/bellolibrary/src/main/java/me/bello/bellolibrary/Utils/DeviceUtils.java +++ b/bellolibrary/src/main/java/me/bello/bellolibrary/Utils/DeviceUtils.java @@ -1,16 +1,22 @@ package me.bello.bellolibrary.Utils; +import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.wifi.WifiManager; import android.provider.Settings; +import android.support.annotation.NonNull; import android.telephony.TelephonyManager; import android.util.DisplayMetrics; import android.view.WindowManager; import me.bello.bellolibrary.Logger.Logger; +import me.bello.bellolibrary.Permission.PermissionListener; +import me.bello.bellolibrary.Permission.PermissionsUtil; + +import static android.Manifest.permission.READ_PHONE_STATE; /** @@ -61,19 +67,38 @@ * @param mContext * @return */ + @SuppressLint("MissingPermission") public static String getIMEI(Context mContext) { +// READ_PHONE_STATE try { - TelephonyManager manager = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); - String imei = manager.getDeviceId(); - if (imei == null) { + final TelephonyManager[] manager = {(TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)}; + final String[] imei = {""}; + if(PermissionsUtil.hasPermission(mContext, READ_PHONE_STATE)){ + imei[0] = manager[0].getDeviceId(); + } else { + PermissionsUtil.requestPermission(mContext, new PermissionListener() { + @Override + public int permissionGranted(@NonNull String[] permission) { + imei[0] = manager[0].getDeviceId(); + return 0; + } + + @Override + public void permissionDenied(@NonNull String[] permission) { + + } + }, READ_PHONE_STATE); + } + + if (imei[0] == null) { // android pad // 在主流厂商生产的设备上,有一个很经常的bug,就是每个设备都会产生相同的ANDROID_ID:9774d56d682e549c - imei = "PAD" + Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); - } else if (imei.contains("00000000000")) { + imei[0] = "PAD" + Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); + } else if (imei[0].contains("00000000000")) { // 模拟器 - imei = "DEV" + Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); + imei[0] = "DEV" + Settings.Secure.getString(mContext.getContentResolver(), Settings.Secure.ANDROID_ID); } - return imei; + return imei[0]; } catch (Exception e) { e.printStackTrace(); Logger.e("获取IEMI异常");