Andorid10无法获取IMEI,读写文件也被限制。

获取设备唯一ID逻辑。

如果Android10以上 -> 在设备的外部目录创建UUID,只要用户没有手动删除该文件UUID一直存在。

如果Android10以下,获取设备IMEI

如果没有获取到IMEI -> 在设备外部目录创建UUIID

如果考虑IMEI是私密信息,可以对IMEI做MD5再返回。

import android.annotation.SuppressLint;

import android.content.ContentResolver;

import android.content.ContentUris;

import android.content.ContentValues;

import android.content.Context;

import android.content.SharedPreferences;

import android.database.Cursor;

import android.net.Uri;

import android.os.Build;

import android.os.Environment;

import android.provider.MediaStore;

import android.telephony.TelephonyManager;

import android.text.TextUtils;

import android.util.Log;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.util.UUID;

/**

* create by Huanmie on 2019-11-26 11:51

*/

public final class DeviceIdUtils {

private static final String TAG = DeviceIdUtils.class.getSimpleName();

private static final String TEMP_DIR = "system_config";

private static final String TEMP_FILE_NAME = "system_file";

private static final String TEMP_FILE_NAME_MIME_TYPE = "application/octet-stream";

private static final String SP_NAME = "device_info";

private static final String SP_KEY_DEVICE_ID = "device_id";

public static String getDeviceId(Context context) {

SharedPreferences sharedPreferences = context.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);

String deviceId = sharedPreferences.getString(SP_KEY_DEVICE_ID, null);

if (!TextUtils.isEmpty(deviceId)) {

return deviceId;

}

deviceId = getIMEI(context);

if (TextUtils.isEmpty(deviceId)) {

deviceId = createUUID(context);

}

sharedPreferences.edit()

.putString(SP_KEY_DEVICE_ID, deviceId)

.apply();

return deviceId;

}

private static String createUUID(Context context) {

String uuid = UUID.randomUUID().toString().replace("-", "");

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {

Uri externalContentUri = MediaStore.Downloads.EXTERNAL_CONTENT_URI;

ContentResolver contentResolver = context.getContentResolver();

String[] projection = new String[]{

MediaStore.Downloads._ID

};

String selection = MediaStore.Downloads.TITLE + "=?";

String[] args = new String[]{

TEMP_FILE_NAME

};

Cursor query = contentResolver.query(externalContentUri, projection, selection, args, null);

if (query != null && query.moveToFirst()) {

Uri uri = ContentUris.withAppendedId(externalContentUri, query.getLong(0));

query.close();

InputStream inputStream = null;

BufferedReader bufferedReader = null;

try {

inputStream = contentResolver.openInputStream(uri);

if (inputStream != null) {

bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

uuid = bufferedReader.readLine();

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (bufferedReader != null) {

try {

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (inputStream != null) {

try {

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

} else {

ContentValues contentValues = new ContentValues();

contentValues.put(MediaStore.Downloads.TITLE, TEMP_FILE_NAME);

contentValues.put(MediaStore.Downloads.MIME_TYPE, TEMP_FILE_NAME_MIME_TYPE);

contentValues.put(MediaStore.Downloads.DISPLAY_NAME, TEMP_FILE_NAME);

contentValues.put(MediaStore.Downloads.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + File.separator + TEMP_DIR);

Uri insert = contentResolver.insert(externalContentUri, contentValues);

if (insert != null) {

OutputStream outputStream = null;

try {

outputStream = contentResolver.openOutputStream(insert);

if (outputStream == null) {

return uuid;

}

outputStream.write(uuid.getBytes());

} catch (IOException e) {

e.printStackTrace();

} finally {

if (outputStream != null) {

try {

outputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

} else {

File externalDownloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

File applicationFileDir = new File(externalDownloadsDir, TEMP_DIR);

if (!applicationFileDir.exists()) {

if (!applicationFileDir.mkdirs()) {

Log.e(TAG, "文件夹创建失败: " + applicationFileDir.getPath());

}

}

File file = new File(applicationFileDir, TEMP_FILE_NAME);

if (!file.exists()) {

FileWriter fileWriter = null;

try {

if (file.createNewFile()) {

fileWriter = new FileWriter(file, false);

fileWriter.write(uuid);

} else {

Log.e(TAG, "文件创建失败:" + file.getPath());

}

} catch (IOException e) {

Log.e(TAG, "文件创建失败:" + file.getPath());

e.printStackTrace();

} finally {

if (fileWriter != null) {

try {

fileWriter.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

} else {

FileReader fileReader = null;

BufferedReader bufferedReader = null;

try {

fileReader = new FileReader(file);

bufferedReader = new BufferedReader(fileReader);

uuid = bufferedReader.readLine();

bufferedReader.close();

fileReader.close();

} catch (IOException e) {

e.printStackTrace();

} finally {

if (bufferedReader != null) {

try {

bufferedReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

if (fileReader != null) {

try {

fileReader.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

return uuid;

}

private static String getIMEI(Context context) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

return null;

}

try {

TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

if (telephonyManager == null) {

return null;

}

@SuppressLint({"MissingPermission", "HardwareIds"}) String imei = telephonyManager.getDeviceId();

return imei;

} catch (Exception e) {

return null;

}

}

}

java获取imei_Android10 获取IMEI,获取UUID,唯一ID相关推荐

  1. 获取手机的设备信息和唯一ID

    1.获取手机基本信息 参考:https://blog.csdn.net/wjky2014/article/details/109733589 一.获取手机基本信息(厂商.型号等参数) 二.设备信息获取 ...

  2. Android 10.0之后系统获取不到IMEI和UUID解决办法

    Android 10.0以后版本无法通过 tm.getDeviceId();获取,所以要通过androidId来代表唯一性,如下: TelephonyManager tm = (TelephonyMa ...

  3. Android 获取CellId以及IMEI 获取基站id

    private void setCellIdentity() {if (isMobileConnected(this)) {System.out.println("基站已连接"); ...

  4. Android 获取CellId以及IMEI 获取基站id

    TelephonyManager tm  =  (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);         GsmC ...

  5. Java工具类--雪花算法生成全局唯一ID

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

  6. Android Q 获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID)

    Android Q获取设备唯一ID(UDID\GUID\UUID\SSAID\GAID) 一.简介 1.1 问题背景 1.2 关键技术 二.解决方案 2.1 谷歌官方推荐方案 (4种) 2.2 实现方 ...

  7. SpringBoot集成百度uid-generator唯一ID生成器

    大家好,我是猿人(猿码天地创始人),今天给码农们或即将成为码农或想成为码农的朋友讲讲SpringBoot集成百度uid-generator唯一ID生成器,现在是深夜23:10分,猿人最擅长熬夜,就是不 ...

  8. java long 唯一_Java工具类:获取long型唯一ID

    方法二: import java.text.SimpleDateFormat; import java.util.Date; /** * 获取long型唯一ID */ public class ID ...

  9. ios获取手机序列号_iOS-获取手机唯一标识符(获取苹果手机IMEI,获取苹果手机MAC)...

    一.iOS7以后不能获取手机IMEI iOS2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号, 这个也是目前为止唯一可 ...

最新文章

  1. 各种主流 SQLServer 迁移到 MySQL 工具对比
  2. java全能速查宝典.chm_Java API 快速速查宝典
  3. Linux系统下的/etc/nsswitch.conf文件
  4. postfix邮件过滤
  5. python100行代码程序-100行python代码,轻松完成贪吃蛇小游戏
  6. python生成100个随机数_Python_0——100闭区间产生3个随机数,两种方法排序
  7. Oracle分页排序数据混乱原因及解决
  8. 实录分享 | 计算未来轻沙龙:对话系统研究进展(视频 + PPT)
  9. 关于WDM驱动开发的不错资料(来自codeproject)
  10. ProtoBuff3.0.0在Ubuntu上安装
  11. 解决 :IDEA 修改代码后 Local Changes 中没有提示待提交文件,代码自动提交了
  12. anaconda来创建python环境
  13. Mr.J--C语言编译错误C2039
  14. android gif转jpg格式文件,android使用多张图片合成gif文件
  15. docbook_DocBook简介,一种值得学习的灵活标记语言
  16. php的基本语法与字符串与增删改查
  17. select中常用的对象
  18. mac下安装win7虚拟机
  19. 74.android 简单的跳转到小米安全中心首页和小米安全中心的权限管理
  20. 重载函数sroot3次,让它返回整数、长整数、双精度数的二次方根

热门文章

  1. 基于主题模型的专利文本主题挖掘与应用研究- 专利文本主题挖掘方法
  2. python 处理 ecel文件
  3. 惠普打印机不能扫描到pc
  4. Excel 表格的基本操作(精选 39 个技巧)
  5. 为什么用手机USB共享网络,WIN10就变得异常卡顿?
  6. 胖枢纽:为什么我们不是枢纽极简主义者
  7. ping 包命令使用
  8. 【图文教程】MacOS 下载/安装 我的世界 Minecraft + 宝可梦 Pixelmon Modpack
  9. MacOs 下载和安装git
  10. 强大!Python 自动化清理微信僵尸好友