广告
返回顶部
首页 > 资讯 > 移动开发 >Android 如何获取设备唯一标识
  • 964
分享到

Android 如何获取设备唯一标识

2024-04-02 19:04:59 964人浏览 泡泡鱼
摘要

目录一. 先简单总结一下比较常见的几个解决方案的弊端:1. IMEI2. Android ID3. Mac地址二. uuid + 本地文件,实现一个通用解决方案1. 思路2. 解决手

一. 先简单总结一下比较常见的几个解决方案的弊端:

1. IMEI

Android 10 中官方明确说明第三方应用无法获取到IMEI码:Android 10 中的隐私权变更,

Android 10 以下的版本,需要申请READ_PHONE_STATE权限。

2. Android ID

Android ID 不具有真正的唯一性,

ROOT、刷机、恢复出厂设置、不同签名的应用等都会导致获取的 Android ID 发生改变,

并且不同厂商定制的系统的BUG会导致不同的设备可能会产生相同的 Android ID。

3. MAC地址

Android 10 中 MAC地址具有随机化的特征:Android 10 中的隐私权变更—MAC地址,

虽然目前大部分手机还不支持这个特性,但是随着厂商的跟进,这个方案就会逐渐作废

在上面这些设备自带的标识不够满足需求时,我们就要采用另外的方法了。

二. uuid + 本地文件,实现一个通用解决方案

1. 思路

启动APP时,检查并读取根目录下保存有uuid的文件,若没有该文件,则视为一台新设备,创建文件并写入uuid。

并且要确保卸载应用时,该文件不会被系统携带着删除(这也是为什么要在根目录下创建的原因)。

2. 解决手机访问SDK权限问题

Android 6 以下,添加权限:


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

Android 6 及其以上,则需要在此基础上申请动态权限。

Android 10 及其以上,文件存储机制修改成了沙盒模式,即应用只能访问自己沙盒下的文件和公共媒体文件。

“得益”于沙盒机制,应用创建的文件属于自己的沙盒,那么当应用卸载时,也会随之删除。

目前可以添加以下一行代码解决沙盒问题:


<application
  ...
  android:requestLegacyExternalStorage="true">

这样我们就能在“根目录”创建自己文件了。

3. 适配 Android 11

Android 11 会强制执行沙盒模式,在这之前存储权限可以简单的分为“禁止”和“允许”,在这之后存储权限可以简单的分为“禁止”、“允许访问媒体文件”和“允许访问所有文件”。

“允许访问媒体文件”这是绝大多数应用能够申请到的,而“允许访问所有文件”只有文件管理类应用可以申请到。假如你不是该类应用但又申请了该权限,那么就会通不过Google Play的审核。

允许访问所有文件:android.permission.MANAGE_EXTERNAL_STORAGE

介绍到这儿,其实一个方案已经出来了:直接申请“允许访问所有文件”权限,后果就是不能通过Google Play的审核。

另外还有一个办法:我们暂时不升级SDK,针对 Android 10 (SDK 29)来开发应用,这样的话由于“向后兼容机制”,我们的应用是能够正常跑在 Android 11 系统上的。

4. Flutter 代码实践


import 'dart:io';
import 'package:uuid/uuid.dart';

// 本地持久化存储uuid代码实践
class Storage {
 static File file;

 // 入口
 static Future<String> init() async {
  bool boolCreateFile = await createFile();
  if (boolCreateFile) {
   String uuid = await readData();
   return uuid;
  } else {
   await writeData();
   String uuid = await readData();
   return uuid;
  }
 }

 // 创建文件
 static Future<bool> createFile() async {
  file = File('/storage/emulated/0/uuid.ini'); // 指向根目录下的文件uuid
  bool exists = await file.exists();
  return exists;
 }

 // 写入数据
 static writeData() async {
  // 如果文件存在,会将原来的内容覆盖, 如果不存在,则创建文件
  String uuid = await getUuid();
  file.writeAsString('$uuid');
 }

 // 读取文件
 static Future<String> readData() async {
  try {
   String uuid = await file.readAsString();
   return uuid;
  } catch (e) {
   return null;
  }
 }

 // 获取uuid,采用的插件:uuid
 static Future<String> getUuid() async {
  Uuid uuidObj = Uuid();
  String uuid = uuidObj.v1();
  return uuid;
 }
}

以上就是Android 如何获取设备唯一标识的详细内容,更多关于Android 获取设备唯一标识的资料请关注编程网其它相关文章!

--结束END--

本文标题: Android 如何获取设备唯一标识

本文链接: https://www.lsjlt.com/news/122522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android 如何获取设备唯一标识
    目录一. 先简单总结一下比较常见的几个解决方案的弊端:1. IMEI2. Android ID3. MAC地址二. uuid + 本地文件,实现一个通用解决方案1. 思路2. 解决手...
    99+
    2022-11-12
  • android如何获取设备唯一标识
    这篇文章主要介绍了android如何获取设备唯一标识,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下: public static Str...
    99+
    2023-05-30
    android
  • iOS获取设备唯一标识的实现步骤
    目录1. 常用的UUID2. MAC 地址2.1 首先导入下面几个库:2.2 新建一个文件,继承NSObject,在.m文件导入头文件,以及定义一些宏3.UUID+自己存储3.1 获...
    99+
    2022-05-20
    iOS 设备 标识
  • android获取手机唯一标识的方法
    代码如下:import android.provider.Settings.Secure; private String android_id = Secure.getStr...
    99+
    2022-06-06
    方法 手机 Android
  • android手机获取唯一标识的方法
    获取手机唯一标识 拼接的方式获取手机唯一标识第一种方式是获取IMEI,但是有的手机如果不是正品的话,就获取不到所以通过这一种方式还是会出现有的设备是没有唯一标识的 第二种方式获取手机卡的序列号,当然这种也不是唯一的,因为有的手机是双卡双待的...
    99+
    2023-05-31
    android 手机 标识
  • 在Android中获取手机的唯一标识码的方法
    在Android中获取手机的唯一标识码的方法 在Android平台上,无论是手机还是平板,获取设备唯一标识码的方式是通用的。以下是一些常见的方式: 1. IMEI(International Mobile Equipment Identit...
    99+
    2023-12-23
    android 智能手机
  • 获取Android系统唯一识别码的方法
    本文实例讲述了获取Android系统唯一识别码的方法。分享给大家供大家参考。具体如下: 在计算机上,我们习惯用MAC地址来标志一台计算机。在Android设备上,可以用IMIE...
    99+
    2022-06-06
    方法 Android
  • Android应用中获取设备唯一ID的方法有哪些
    本篇文章为大家展示了Android应用中获取设备唯一ID的方法有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。先来看看几种比较单一的方式:IMEI方式:TelephonyManager.getD...
    99+
    2023-05-31
    android roi
  • 详解如何在Flutter中获取设备标识符
    目录使用 platform_device_id应用预览代码使用 device_info_plus应用预览代码结论本文将引导您完成 2 个示例,演示如何在 Flutter 中获取设备标...
    99+
    2022-11-13
  • 怎么在Flutter中获取设备标识符
    这篇文章主要介绍了怎么在Flutter中获取设备标识符的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在Flutter中获取设备标识符文章都会有所收获,下面我们一起来看看吧。使用 platform_devic...
    99+
    2023-06-29
  • JavaScript如何获取数组唯一值
    这篇文章主要为大家展示了“JavaScript如何获取数组唯一值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JavaScript如何获取数组唯一值”这篇文章吧...
    99+
    2022-10-19
  • PHP获取访问浏览器的唯一标识useragent,判断是不是oppo内置浏览器
    导读: 最近遇到一个问题,我的网站域名(正规网站)被oppo内置浏览器给拦截了,我提交申诉一两个月了,都没有工作人员处理,可见oppo浏览器非常的不称职,建议大家不要用。拦截申诉不了,那怎么办呢?解决方法就是检测用户访问的浏览器唯一标识us...
    99+
    2023-09-10
    javascript 开发语言 ecmascript
  • Android设备序列号:如何获取和查找您的Android设备的序列号
    Android设备序列号:如何获取和查找您的Android设备的序列号 在使用Android设备时,有时候需要查找设备的序列号来进行诊断、维修或者进行其他操作。本文将介绍如何获取和查找Android设...
    99+
    2023-10-01
    android Android
  • Nodejs如何获取时间加手机标识的32位标识
    这篇文章主要介绍Nodejs如何获取时间加手机标识的32位标识,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体代码如下所示:var crypto = ...
    99+
    2022-10-19
  • 如何获取Android设备挂载的所有存储器
    android系统提供了Environment.getExternalStorageDirectory()接口获得存储器的路径,但是这个接口往往给的结果并不是我们想要的,在某些...
    99+
    2022-06-06
    存储器 存储 Android
  • Android设备如何获取扫码枪扫描的内容
    这篇文章将为大家详细讲解有关Android设备如何获取扫码枪扫描的内容,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。那么android设备如何通过蓝牙获取扫描内容的呢?1. 蓝牙配对,连接设备打开系统设置...
    99+
    2023-05-30
    android
  • Python中如何获取单成员集合中的唯一元素
    这篇文章主要介绍了Python中如何获取单成员集合中的唯一元素的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中如何获取单成员集合中的唯一元素文章都会有所收获,下面我们一起来看看吧。Python 中要...
    99+
    2023-07-06
  • 如何才能获取MySQL结果集中某列的唯一值?
    在从 MySQL 表中查询数据时,我们可能会从列中获取重复值。借助 SELECT 语句中的 DISTINCT 子句,我们可以去除结果集中的重复数据。语法SELECT DISTINCT Columns FROM Table_name ...
    99+
    2023-10-22
  • 【Flutter】如何在 Flutter 中获取设备 ID
    文章目录 一、 前言二、 设备 ID 的重要性1. 什么是设备 ID2. 设备 ID 的作用 三、 在 Flutter 中获取设备 ID1. 需要的工具和库2. 简单代码示例3. 完整可以运行的代码 四、 注意事项1. ...
    99+
    2023-08-17
    flutter android ios 原力计划
  • ubuntu中无法识别android设备如何解决
    ubuntu中无法识别android设备如何解决,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。获取usb设备信息通过usb连接上我们的手机,然后打开终端,输入lsusb,出...
    99+
    2023-06-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作