安卓Q中google彻底禁止了第三发应用获取imei,并且mac地址返回的地址也变成了02:00:00:00:00:00。

这是官方给出的解决方案:

https://developer.android.com/training/articles/user-data-ids

这是官网的截图:

方法一:

既然这两个都没法获取了,所以想到获取ANDROID_ID:

    public static String getAndroidId (Context context) {String ANDROID_ID = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID);return ANDROID_ID;}

但是发现不同应用的正式包在相同设备上得到的ANDROID_ID结果不同,因此显然该方案不可行。

方法二:

按照google官方意见,是在安装应用时,生成UUID,保存到本地,如果本地已经存在UUID,则不在保存,这样就可以将UUID作为唯一标识符。下面是官方推荐截图:

好的,那么就使用UUID:

String uuidStr = UUID.randomUUID().toString();

将UUID以文件的形式保存在多媒体文件目录下,这样一来各个不同的应用间都能采用同一个UUID。生成UUID。其中 saveFileName 为存放uuid数据的文件名:

 /*** 在媒体文件中 生成fileName文件* 向Mediastore添加内容** @param saveFileName 保存文件的名称*/private void creatUUIDFile(String saveFileName) {ContentValues values = new ContentValues();values.put(MediaStore.Images.Media.DISPLAY_NAME, saveFileName);values.put(MediaStore.Images.Media.MIME_TYPE, "image/*");// TODO: 2019-10-11 IS_PENDING = 1表示对应的item还没准备好values.put(MediaStore.Images.Media.IS_PENDING, 1);ContentResolver resolver = this.getContentResolver();Uri collection = MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);Uri uri = resolver.insert(collection, values);try {//访问 对于单个媒体文件,请使用 openFileDescriptor()。ParcelFileDescriptor fielDescriptor = resolver.openFileDescriptor(uri, "w", null);FileOutputStream outputStream = new FileOutputStream(fielDescriptor.getFileDescriptor());try {//讲UUID写入到文件中String uuidStr = UUID.randomUUID().toString();outputStream.write(uuidStr.getBytes());outputStream.close();Log.d(TAG, "写入 uuidStr:" + uuidStr);} catch (IOException e) {e.printStackTrace();}values.clear();values.put(MediaStore.Images.Media.IS_PENDING, 0);          //设置为0resolver.update(uri, values, null, null);} catch (FileNotFoundException e) {e.printStackTrace();}}

如果需要判断是否已经存在存放uuid的文件,则用下面的方法:

    /*** 检查文件是否存在** @param saveFileName 保存文件的名称* @return true 为存在   false为不存在*/private boolean checkUUIDFileByUri(String saveFileName) {Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;String[] projection = {MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media._ID};//查询ContentResolver contentResolver = this.getContentResolver();// 添加筛选条件String selection = MediaStore.Images.Media.DISPLAY_NAME + "=" + "'" + saveFileName + "'";Cursor mCursor = contentResolver.query(mImageUri, projection, selection, null, null);String getSaveContent = "";if (mCursor != null) {while (mCursor.moveToNext()) {int fileIdIndex = mCursor.getColumnIndex(MediaStore.Images.Media._ID);String thumbPath = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().appendPath(String.valueOf(mCursor.getInt(fileIdIndex))).build().toString();Uri fileUri = Uri.parse(thumbPath);try {ParcelFileDescriptor fielDescriptor = contentResolver.openFileDescriptor(fileUri, "r", null);FileInputStream inputStream = new FileInputStream(fielDescriptor.getFileDescriptor());getSaveContent = inputStreamToString(inputStream);} catch (FileNotFoundException e) {e.printStackTrace();}//只有在得到的唯一标识符不为空的情况下才结束循环,否则一直循环if (!TextUtils.isEmpty(getSaveContent)) {break;}}mCursor.close();}return !getSaveContent.equals("");}

上面代码中的inputStreamToString()方法为流转字符串,代码如下:

    /*** 流转为字符串** @param is 流* @return 转换完成的字符串*/public String inputStreamToString(InputStream is) {BufferedReader reader = new BufferedReader(new InputStreamReader(is));StringBuilder sb = new StringBuilder();String line;try {while ((line = reader.readLine()) != null) {sb.append(line).append("/n");}} catch (IOException e) {e.printStackTrace();} finally {try {is.close();} catch (IOException e) {e.printStackTrace();}}return sb.toString();}

好的,先这样。

Android Q(安卓10)获取唯一ID(最优解)相关推荐

  1. 谷歌手机升级android10,Android Q安卓10.0新特性,首批支持升级21款手机

    原标题:Android Q安卓10.0新特性,首批支持升级21款手机 2019年5月8日,一年一度的谷歌I/O开发者大会在美国加州如期召开,并发布了全新系列Android Q(安卓10.0)操作系统, ...

  2. [Unity][安卓]unity获取唯一ID,游客登陆

    之前做的时候在网上找了好多有现在整理下一个可以用的 代码段如下 在java中编写 public String GetID(){String serial = null;String m_szDevID ...

  3. Android Q(10.0)版本新特性和兼容性适配

    北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了.Android Q 为开发者们带来了许多新 ...

  4. Android Q(10.0)上IMEI获取不到;Android Q(10.0)上OAID替代IMEI;OAID获取方式

    最近公司研发的 Android Q (android 10)的5G手机,然后就开始适配Android Q:发现无系统权限的应用无法获取到可作为唯一标识的IMEI,MAC等等:由于项目(负一屏/浏览器/ ...

  5. Android 获取唯一Id

    git:GitHub - gzu-liyujiang/Android_CN_OAID: 安卓设备唯一标识解决方案,可完全替代移动安全联盟统一 SDK 闭源方案.包括国内手机厂商的开放匿名标识(OAID ...

  6. android 获取唯一Id,小小总结一下。仅供参考

    1.获取imei: 前言: 因传统的移动终端设备标识如国际移动设备识别码(IMEI)等已被部分国家认定为用户隐私的一部分, 并存在被篡改和冒用的风险,所以在Android 10及后续版本中非厂商系统应 ...

  7. Android: 实测安卓10下无法获取MEID的解决办法(附smali代码)_20200928_七侠镇莫尛貝

    安卓10下: String meid = ((TelephonyManager) context.getSystemService("phone")).getDeviceId(); ...

  8. Android10获取唯一ID最佳做法

    官方文档 安卓Q中Google彻底禁止第三发app获取IMEI,WIFI和蓝牙的MAC地址为:02:00:00:00:00:00. 1.使用实例 ID 和 GUID 对于实例 ID 不实用的情况,您还 ...

  9. Android Q(10.0 API29)版本新特性和兼容性适配

    摘要 1.本文档基于谷歌AndroidQ官方文档和一加Q版本应用兼容性整改指导 2.本文档主要对影响比较大的部分进行简单总结,内容并不全面: 3.版本号对应关系: Android-Q = Androi ...

最新文章

  1. 小程序直播间页面路径怎么访问直播间_以小程序为例,在线教育产品的直播间有哪些功能设计?...
  2. 借助 IIS 管理器 -- 用手机测试HTML页面
  3. 【ABAP】BASE64加密及解密
  4. Java实现插入排序及其优化 insertion sort
  5. Volatility内存分析工具-某即时通讯软件Windows端数据库密钥的分析
  6. C#面向对象架构总结
  7. Access2016学习2
  8. aix oracle 创建实例,11gR2 for AIX使用dbca创建数据库遇到ORA-03113错误的案例
  9. 利用python的pyqt5和vtk库实现对gcode模型的全彩预览
  10. 论文翻译:2020_Improving Perceptual Quality By Phone-Fortified Perceptual Loss For Speech Enhancement...
  11. 电子工程师的自我修养 - 20例电路讲解
  12. 简易编程入门Part1
  13. 动手学习深度学习(Pytorch版)Task 2:文本预处理
  14. WKWebView 设置 UserAgent
  15. ns-3学习手记11_ofswitch13安装教程
  16. TensorFlow绘制loss/accuracy曲线
  17. 2022-11-08 Python基础知识 2
  18. js判断数组,对象,是否为空,是否含有某个值,判断数组中对象是否有某个值
  19. 计算机程序漏洞用英语怎么说,漏洞用英语怎么说
  20. sql 上一行减下一行_买大米时,不管什么牌子,只要包装袋上没这一行字,别买~...

热门文章

  1. 自行车存放管理系统c语言课程设计,基于51单片机的自行车智能辅助系统设计-(Proteus仿真图+源程序+论文)...
  2. MCMC法估计动力学模型参数
  3. 免费分享thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开
  4. 优化算法——拟牛顿法之L-BFGS算法
  5. ROS路由系统esxi虚拟机ova模板下载,2G硬盘支持升级
  6. 计算机二级flash选择题,计算机二级模拟试题答案
  7. crow-han(基于go-micro框架的微服务脚手架)-01-快速启动(简介、快速启动、接口测试)
  8. 江苏计算机二级vc,江苏计算机二级(VC++)上机考试分析与策略
  9. python的PyObjC库
  10. Qpython安卓手机读取短信