亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Android 如何獲取設備唯一標識

瀏覽:9日期:2022-09-20 09:40:46
一. 先簡單總結一下比較常見的幾個解決方案的弊端: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 獲取設備唯一標識的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 欧美在线视频一区二区三区 | 美国一级毛片片aa成人 | 青青伊人91久久福利精品 | 日不卡在线 | 毛片 ftp| 国产精选91热在线观看 | 国产噜噜噜精品免费 | 特黄色 | 免费视频久久 | 黄色资源在线 | 日日麻批免费视频 | 国产永久免费高清在线观看视频 | 亚洲欧洲视频在线观看 | 国产精品一卡二卡三卡 | 日韩特级毛片免费观看视频 | 国产午夜亚洲精品第一区 | 日韩美女毛片 | 国产色站 | 国产97色在线 | 免费 | 日本一级网站 | 我想看一级黄色毛片 | 在线看成人 | 亚洲一区二区三区播放在线 | 一级女人毛片人一女人 | 国产情侣真实露脸在线最新 | 国产一区二区免费播放 | 亚洲欧洲日韩国产 | 成人无遮挡免费网站视频在线观看 | 中文字幕日韩在线一区国内 | 欧美亚洲国产成人精品 | 免费视频91 | 亚洲黄色在线播放 | 中文字幕亚洲一区二区va在线 | 亚洲国产精品日韩一线满 | 久久99精品久久久久久综合 | 12306播播影视播播影院午夜 | 亚洲欧美日韩国产精品网 | 福利午夜| 一区二区三区四区在线播放 | 一级性视频 | 中文一级国产特级毛片视频 |