最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 如何獲取設(shè)備唯一標(biāo)識

 更新時間:2021年03月29日 09:50:23   作者:pany  
這篇文章主要介紹了Android 如何獲取設(shè)備唯一標(biāo)識,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下

一. 先簡單總結(jié)一下比較常見的幾個解決方案的弊端:

1. IMEI

Android 10 中官方明確說明第三方應(yīng)用無法獲取到IMEI碼:Android 10 中的隱私權(quán)變更,

Android 10 以下的版本,需要申請READ_PHONE_STATE權(quán)限。

2. Android ID

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

ROOT、刷機(jī)、恢復(fù)出廠設(shè)置、不同簽名的應(yīng)用等都會導(dǎo)致獲取的 Android ID 發(fā)生改變,

并且不同廠商定制的系統(tǒng)的BUG會導(dǎo)致不同的設(shè)備可能會產(chǎn)生相同的 Android ID。

3. MAC地址

Android 10 中 MAC地址具有隨機(jī)化的特征:Android 10 中的隱私權(quán)變更—MAC地址,

雖然目前大部分手機(jī)還不支持這個特性,但是隨著廠商的跟進(jìn),這個方案就會逐漸作廢

在上面這些設(shè)備自帶的標(biāo)識不夠滿足需求時,我們就要采用另外的方法了。

二. uuid + 本地文件,實現(xiàn)一個通用解決方案

1. 思路

啟動APP時,檢查并讀取根目錄下保存有uuid的文件,若沒有該文件,則視為一臺新設(shè)備,創(chuàng)建文件并寫入uuid。

并且要確保卸載應(yīng)用時,該文件不會被系統(tǒng)攜帶著刪除(這也是為什么要在根目錄下創(chuàng)建的原因)。

2. 解決手機(jī)訪問SDK權(quán)限問題

Android 6 以下,添加權(quán)限:

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

Android 6 及其以上,則需要在此基礎(chǔ)上申請動態(tài)權(quán)限。

Android 10 及其以上,文件存儲機(jī)制修改成了沙盒模式,即應(yīng)用只能訪問自己沙盒下的文件和公共媒體文件。

“得益”于沙盒機(jī)制,應(yīng)用創(chuàng)建的文件屬于自己的沙盒,那么當(dāng)應(yīng)用卸載時,也會隨之刪除。

目前可以添加以下一行代碼解決沙盒問題:

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

這樣我們就能在“根目錄”創(chuàng)建自己文件了。

3. 適配 Android 11

Android 11 會強(qiáng)制執(zhí)行沙盒模式,在這之前存儲權(quán)限可以簡單的分為“禁止”和“允許”,在這之后存儲權(quán)限可以簡單的分為“禁止”、“允許訪問媒體文件”和“允許訪問所有文件”。

“允許訪問媒體文件”這是絕大多數(shù)應(yīng)用能夠申請到的,而“允許訪問所有文件”只有文件管理類應(yīng)用可以申請到。假如你不是該類應(yīng)用但又申請了該權(quán)限,那么就會通不過Google Play的審核。

允許訪問所有文件:android.permission.MANAGE_EXTERNAL_STORAGE

介紹到這兒,其實一個方案已經(jīng)出來了:直接申請“允許訪問所有文件”權(quán)限,后果就是不能通過Google Play的審核。

另外還有一個辦法:我們暫時不升級SDK,針對 Android 10 (SDK 29)來開發(fā)應(yīng)用,這樣的話由于“向后兼容機(jī)制”,我們的應(yīng)用是能夠正常跑在 Android 11 系統(tǒng)上的。

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;
  }
 }

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

 // 寫入數(shù)據(jù)
 static writeData() async {
  // 如果文件存在,會將原來的內(nèi)容覆蓋, 如果不存在,則創(chuàng)建文件
  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 如何獲取設(shè)備唯一標(biāo)識的詳細(xì)內(nèi)容,更多關(guān)于Android 獲取設(shè)備唯一標(biāo)識的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android制作微信添加多個圖片放大圖片功能

    Android制作微信添加多個圖片放大圖片功能

    這篇文章主要介紹了Android制作微信添加多個圖片放大圖片功能,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03
  • 解析ScrollView--仿QQ空間標(biāo)題欄漸變

    解析ScrollView--仿QQ空間標(biāo)題欄漸變

    本篇文章主要介紹了仿QQ空間標(biāo)題欄漸變的實現(xiàn)方法的相關(guān)知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-05-05
  • Android使用BroadcastReceiver監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)的改變

    Android使用BroadcastReceiver監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)的改變

    這篇文章主要為大家詳細(xì)介紹了Android使用BroadcastReceiver監(jiān)聽網(wǎng)絡(luò)連接狀態(tài)的改變,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Android自定義View仿微信LetterView效果

    Android自定義View仿微信LetterView效果

    這篇文章主要介紹了Android自定義View仿微信LetterView效果,代碼簡單易懂,非常不錯,具有參考借鑒借鑒價值,需要的朋友可以參考下
    2017-03-03
  • Android ApplicationInfo 應(yīng)用程序信息的詳解

    Android ApplicationInfo 應(yīng)用程序信息的詳解

    這篇文章主要介紹了Android ApplicationInfo 應(yīng)用程序信息的詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • Android Call(打電話)的基本知識詳解

    Android Call(打電話)的基本知識詳解

    本文主要介紹了Android Call(打電話)的基本知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 6步輕松實現(xiàn)兩個listView聯(lián)動效果

    6步輕松實現(xiàn)兩個listView聯(lián)動效果

    這篇文章主要為大家詳細(xì)介紹了教大家通過6步輕松實現(xiàn)兩個listView聯(lián)動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Android context源碼詳解及深入分析

    Android context源碼詳解及深入分析

    這篇文章主要介紹了Android context源碼詳解及深入分析的相關(guān)資料,這里對Android Context 如何使用進(jìn)行了詳細(xì)介紹,需要的朋友可以參考下
    2017-01-01
  • Android存儲權(quán)限兼容問題解析

    Android存儲權(quán)限兼容問題解析

    在?Android?開發(fā)中,存儲權(quán)限是一個常見且重要的權(quán)限,不同版本的?Android?系統(tǒng)對于存儲權(quán)限的管理和處理方式存在差異,這就導(dǎo)致了開發(fā)者在處理存儲權(quán)限時會遇到各種兼容問題,本文將詳細(xì)介紹?Android?各版本存儲權(quán)限的變化,以及如何進(jìn)行兼容處理,并給出具體的代碼示例
    2025-02-02
  • 淺談Android Studio 解析XML的三種方法

    淺談Android Studio 解析XML的三種方法

    這篇文章主要介紹了淺談Android Studio 解析XML的三種方法,Android Studio 解析XML常見的三種方式:DOM PULL SAX,非常具有實用價值,需要的朋友可以參考下
    2018-07-07

最新評論

晋中市| 晋宁县| 佛冈县| 长子县| 南皮县| 汉寿县| 门源| 丰城市| 赞皇县| 南开区| 安阳市| 正安县| 长沙市| 微博| 雅安市| 扶余县| 滨州市| 湖南省| 揭东县| 周至县| 历史| 同心县| 武功县| 陇川县| 遂宁市| 太白县| 海南省| 雷波县| 华容县| 常宁市| 禹州市| 台前县| 福安市| 嘉兴市| 永宁县| 永川市| 云南省| 临湘市| 抚顺市| 邢台市| 山丹县|