100個 Unity踩坑小知識點】| Unity調用API ,動態獲取Android權限,附帶所有Android權限表格

      網友投稿 1280 2025-03-31

      Unity


      小科普

      老規矩,先介紹一下

      Unity

      的科普小知識:

      Unity

      是 實時3D互動內容創作和運營平臺 。

      Unity

      平臺提供一整套完善的軟件解決方案,可用于創作、運營和變現任何實時互動的2D和3D內容,支持平臺包括

      手機

      平板電腦

      PC

      游戲主機

      增強現實

      虛擬現實設備。

      也可以簡單把

      Unity

      理解為一個

      游戲引擎

      ,可以用來專業制作

      游戲

      Unity

      踩坑小知識點學習

      Unity調用API ,動態獲取Android權限

      在開發安卓應用時,經常會用到獲取Android權限的問題。

      這個問題有兩種解決方案

      一種是在Android端就已經寫好了動態獲取權限的方法,Unity調用該方法就可以了。

      【100個 Unity踩坑小知識點】| Unity調用API ,動態獲取Android權限,附帶所有Android權限表格

      另一種是直接在Unity中調用API,申請權限獲取(在2019之后Unity已經提供了面向Android的 權限申請方法)

      那對于做Unity開發的來講,自然是直接在Unity端調用API申請權限比較方便了,下面簡單說一下怎樣調用。

      想了解第一種方法的可以看這篇文章:Unity與Android Studio交互之 ? 獲取手機權限(存儲、錄音、相機等)

      Unity官方API鏈接:https://docs.unity3d.com/ScriptReference/Android.Permission.html

      點開源碼可以看到Unity也存的是權限名稱,這說明我們也可以自定義一些權限用來彈窗,不一定必須使用它寫好的。

      Unity提供的這個API可以在腳本中直接調用,API使用示例如下:

      private void Start() { Permission.RequestUserPermission(Permission.Camera); Permission.RequestUserPermission(Permission.Microphone); Permission.RequestUserPermission(Permission.FineLocation); Permission.RequestUserPermission(Permission.CoarseLocation); Permission.RequestUserPermission(Permission.ExternalStorageRead); Permission.RequestUserPermission(Permission.ExternalStorageWrite); }

      下面是一個 使用Unity動態申請權限 的完整的示例代碼:

      第一種方案:

      using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.Android; public class PerTest : MonoBehaviour { string[] strs = new string[] { "android.permission.INTERNET", "android.permission.READ_PHONE_STATE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.ACCESS_WIFI_STATE", "android.permission.ACCESS_NETWORK_STATE", "android.permission.GET_TASKS", "android.permission.REQUEST_INSTALL_PACKAGES", "android.permission.WAKE_LOCK", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.CHANGE_WIFI_STATE", "android.permission.CHANGE_NETWORK_STATE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.SYSTEM_OVERLAY_WINDOW", "android.permission.ACCESS_COARSE_UPDATES", "android.permission.WRITE_SETTINGS", "android.permission.BATTERY_STATS", "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" }; void Start() { for (int i = 0; i <= strs.Length - 1; i++) { Permission.RequestUserPermission(strs[i]); Debug.Log("添加權限: " + strs[i]); } } }

      第二種方案:

      using System.Linq; using UnityEngine; using UnityEngine.Android; public class PerTest : MonoBehaviour { //想要獲取權限的字符串數組 string[] strs = new string[] { "android.permission.INTERNET", "android.permission.READ_PHONE_STATE", "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.ACCESS_WIFI_STATE", "android.permission.ACCESS_NETWORK_STATE", "android.permission.GET_TASKS", "android.permission.REQUEST_INSTALL_PACKAGES", "android.permission.WAKE_LOCK", "android.permission.SYSTEM_ALERT_WINDOW", "android.permission.CHANGE_WIFI_STATE", "android.permission.CHANGE_NETWORK_STATE", "android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION", "android.permission.SYSTEM_OVERLAY_WINDOW", "android.permission.ACCESS_COARSE_UPDATES", "android.permission.WRITE_SETTINGS", "android.permission.BATTERY_STATS", "android.permission.MOUNT_UNMOUNT_FILESYSTEMS" }; void Start() { //開始動態申請權限 strs.ToList().ForEach(s => { Debug.Log("RequestUserPermission: "+s); if (!Permission.HasUserAuthorizedPermission(s)) { Permission.RequestUserPermission(s); Debug.Log("add RequestUserPermission: " + s); } else { Debug.Log("it has RequestUserPermission: " + s); } }); } }

      第三種方案:

      using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Android; public class PerTest : MonoBehaviour { public static PerTest instance; private void Awake() { instance = this; } //初始化,權限申請要盡可能早 [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] public static void Init() { //先把權限添加進列表,然后申請 AndroidPermissionMgr.permissionList.Add("android.permission.READ_PHONE_STATE"); AndroidPermissionMgr.permissionList.Add(Permission.ExternalStorageRead); AndroidPermissionMgr.permissionList.Add(Permission.ExternalStorageWrite); AndroidPermissionMgr.permissionList.Add(Permission.FineLocation); AndroidPermissionMgr.permissionList.Add(Permission.CoarseLocation); AndroidPermissionMgr.StartCheckPermission(0.02f); //開始申請 Debug.Log("權限申請完畢"); } } public static class AndroidPermissionMgr { static int index; public static List permissionList = new List(); public static void StartCheckPermission(float time) { Debug.Log("開始權限申請"); if (permissionList.Count > 0) { Get(permissionList[index], time); } } ///

      /// 外部訪問方法 /// /// 權限名 /// 如拒絕延遲多久再次申請 static void Get(string type, float time) { if (!Permission.HasUserAuthorizedPermission(type)) { Permission.RequestUserPermission(type); Debug.Log("正在獲取的權限:" + type); PerTest.instance.StartCoroutine(Check(type, time)); } else { Debug.Log("權限已經獲取:" + type); if (index < permissionList.Count - 1) { index += 1; Get(permissionList[index], time); } } } static IEnumerator Check(string type, float time) { yield return new WaitForSeconds(time); Get(type, time); } }

      三種方案的彈窗都是一樣的效果,可根據不同的權限需求添加不同的權限。

      下面是參考來的所有Android權限表,大家可以參考一下。

      Android危險權限

      Android所有權限

      Android API unity

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:spss里的相關性表格怎么看
      下一篇:怎么滾動播放(視頻怎么滾動播放)
      相關文章
      日韩欧美亚洲国产精品字幕久久久| 亚洲人成免费电影| 亚洲综合色一区二区三区小说| 亚洲精品无码成人AAA片| 亚洲电影日韩精品| 亚洲AV无码乱码在线观看性色扶 | 国产亚洲精品成人a v小说| 国产成人综合亚洲绿色| 国产精品亚洲二区在线| 亚洲A∨精品一区二区三区| 亚洲av区一区二区三| 爱情岛论坛亚洲品质自拍视频网站| 国产亚洲大尺度无码无码专线| 亚洲国产成人手机在线电影bd | 久久国产亚洲高清观看| 亚洲国产人成网站在线电影动漫| 人人狠狠综合久久亚洲婷婷| 亚洲va久久久噜噜噜久久男同| 国产亚洲av片在线观看16女人| 亚洲女同成av人片在线观看 | 日韩亚洲不卡在线视频中文字幕在线观看| 亚洲a级成人片在线观看| 亚洲AV成人噜噜无码网站| 亚洲人配人种jizz| 亚洲精华国产精华精华液好用 | 国产亚洲AV无码AV男人的天堂| 亚洲中文字幕无码爆乳AV| 国产亚洲精品成人a v小说| 亚洲综合精品网站| 精品国产亚洲一区二区在线观看 | 亚洲乱码卡一卡二卡三| 亚洲天堂免费在线| 国产亚洲综合精品一区二区三区| 亚洲熟女乱综合一区二区| 亚洲精品无码久久久影院相关影片| 亚洲av无码一区二区三区网站| 亚洲美女免费视频| 亚洲欧美一区二区三区日产| 亚洲成a人片在线观看国产| 亚洲精品亚洲人成人网| 亚洲精品中文字幕无乱码|