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

小科普
老規矩,先介紹一下
Unity
的科普小知識:
Unity
是 實時3D互動內容創作和運營平臺 。
Unity
平臺提供一整套完善的軟件解決方案,可用于創作、運營和變現任何實時互動的2D和3D內容,支持平臺包括
手機
、
平板電腦
、
PC
、
游戲主機
、
增強現實
和
虛擬現實設備。
也可以簡單把
Unity
理解為一個
游戲引擎
,可以用來專業制作
游戲
!
Unity
踩坑小知識點學習
Unity調用API ,動態獲取Android權限
在開發安卓應用時,經常會用到獲取Android權限的問題。
這個問題有兩種解決方案
一種是在Android端就已經寫好了動態獲取權限的方法,Unity調用該方法就可以了。
另一種是直接在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
三種方案的彈窗都是一樣的效果,可根據不同的權限需求添加不同的權限。
下面是參考來的所有Android權限表,大家可以參考一下。
Android危險權限
Android所有權限
Android API unity
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。