国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Unity 在Unity端申請Android權(quán)限

這篇具有很好參考價值的文章主要介紹了Unity 在Unity端申請Android權(quán)限。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、前言

前段時間還在職的時候,遇到這么一個問題:SDK首次調(diào)起相機接口進行拍照的時候,會調(diào)起2次相機。并在第2次拍照后閃退。
分析了一下,都是發(fā)生在首次獲取權(quán)限時才會發(fā)生,拿到權(quán)限就不會了。并且2臺會發(fā)生這種情況的Android版本都是13。猜測是SDK獲取權(quán)限接口沒有適配好android13,于是嘗試先把TargetAPI降到Android 10. 如下圖,不過還是會閃退。
unity 權(quán)限申請,Unity通用,unity,android,游戲引擎
然后想了另外的辦法,既然SDK是在申請權(quán)限的時候閃退,那我這邊先自己申請好權(quán)限后,再調(diào)SDK的接口,SDK因為已經(jīng)有權(quán)限就不用申請。測試了一下,果然可行,解決了閃退問題。接下來講下怎么在Unity端申請Android權(quán)限

二、操作步驟

申請安卓權(quán)限一般有2種方式:
方式一:通過Android原生Java/Kotlin代碼申請;
方式二:通過UnityAPI進行申請,這種會更方便一點;
我們講下方式二

2.1 Permission.RequestUserPermissions

  • Unity 提供了 Permission.RequestUserPermission(申請單個權(quán)限) 和 Permission.RequestUserPermissions(申請多個權(quán)限)來申請權(quán)限。
  • 示例代碼如下
/*********************************************
   文件:Leran.cs
   作者:super41
   日期: 2023年7月05日14:05:49
   功能: 
**********************************************/



using System.Text;
using UnityEngine;
using UnityEngine.Android;
using UnityEngine.UI;




public class Learn : MonoBehaviour
{

    //UI相關(guān)
    public Button btn;
    public Text txt;
    
    //申請相關(guān)
    private PermissionCallbacks m_PermissionCallbacks;
    private StringBuilder m_StringBuilder;
    private bool m_IsGetAllPermission;
   
    void Awake()
    {
        btn.onClick.AddListener(()=>{RequestPermissions();});
    }



    /// <summary>
    /// 申請單一權(quán)限
    /// </summary>
    private void RequestCameraPermission()
    {
        if (!Permission.HasUserAuthorizedPermission(Permission.Camera))
        {
            Permission.RequestUserPermission(Permission.Camera);
        }
    }
        
    /// <summary>
    /// 申請多個權(quán)限
    /// </summary>
    private void RequestPermissions()
    {
        if (m_StringBuilder == null)
        {
            m_StringBuilder = new StringBuilder();
        }
        else
        {
            m_StringBuilder.Clear();
        }
        m_IsGetAllPermission = false;
        
        //申請回調(diào)
        m_PermissionCallbacks = new PermissionCallbacks();
        m_PermissionCallbacks.PermissionDenied += OnPermissionDenied;
        m_PermissionCallbacks.PermissionGranted += OnPermissionGranted;
        m_PermissionCallbacks.PermissionDeniedAndDontAskAgain += OnPermissionDeniedAndDontAskAgain;
        
        //申請權(quán)限組
        string[] permissions =
        {
            Permission.Camera,
            Permission.ExternalStorageRead,
            Permission.ExternalStorageWrite,
            // 添加其他權(quán)限
        };

        //執(zhí)行申請多個權(quán)限
        Permission.RequestUserPermissions(permissions,m_PermissionCallbacks);

    }
    
    /// <summary>
    /// 申請權(quán)限被拒絕
    /// </summary>
    /// <param name="permission"></param>
    private void OnPermissionDenied(string permission)
    {
        Write($"OnPermissionDenied:{permission}");
    }
    
    
    /// <summary>
    /// 申請權(quán)限成功
    /// </summary>
    /// <param name="permission"></param>
    private void OnPermissionGranted(string permission)
    {
        Write($"OnPermissionGranted:{permission}");
        //檢查權(quán)限是否全部通過
        if (Permission.HasUserAuthorizedPermission(Permission.Camera) &&
            Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead) &&
            Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
        {
            
            //一次申請多個權(quán)限,比如申請2個。會依次彈窗進行申請,在全部交互完成后才開始回調(diào)接口。如若玩家全部同意。這里會回調(diào)2次
            //所以這里需要加個變量防止重復(fù)回調(diào)
            if (!m_IsGetAllPermission)
            {
                m_IsGetAllPermission = true;
                //在這里處理權(quán)限通過的邏輯
                //do something
                Debug.Log("權(quán)限申請通過");
            }
        }
    }
    
    /// <summary>
    /// 申請權(quán)限被拒絕,且不再詢問
    /// </summary>
    /// <param name="permission"></param>
    private void OnPermissionDeniedAndDontAskAgain(string permission)
    {
        Write($"OnPermissionDeniedAndDontAskAgain:{permission}");
    }

    private void Write(string str)
    {
        m_StringBuilder.AppendLine(str);
        txt.text = m_StringBuilder.ToString();
        Debug.Log(m_StringBuilder.ToString());
    }
}

2.2 把權(quán)限添加到AndroidManifest.xml

我們知道動態(tài)申請的Android權(quán)限,是需要先定義到AndroidManifest.xml里面的;
我們需要在Assets\Plugins\Android\AndroidManifest.xml 添加我們的權(quán)限,Unity會自動合并所有的AndroidManifest;

2.2.1 獲取 AndroidManifest 模板

如果你沒有一個AndroidManifest模板,可以通過以下方法獲得一個AndroidManifest模板

  • 勾選Publishing Settings里的Custom Mainfest
    unity 權(quán)限申請,Unity通用,unity,android,游戲引擎

2.2.2 添加權(quán)限定義

勾選后Unity會自動生成一個模板到Assets\Plugins\Android目錄下,接著我們只需要追加我們需要的權(quán)限就好了
unity 權(quán)限申請,Unity通用,unity,android,游戲引擎

三、結(jié)語

通過以上步驟,就可以在Unity端完成申請andorid權(quán)限了;
有一點需要注意的是,比如同時申請多個權(quán)限。比如2個,那么會依次彈起1/2,2/2窗口進行申請。并在用戶全部操作完后,才會回調(diào)接口;
若用戶都點了同意,那么OnPermissionGranted會回調(diào)2次,需要注意防止多次回調(diào)。比如上面示例用了一個m_IsGetAllPermission變量來防止多次回調(diào);
unity 權(quán)限申請,Unity通用,unity,android,游戲引擎文章來源地址http://www.zghlxwxcb.cn/news/detail-618947.html

到了這里,關(guān)于Unity 在Unity端申請Android權(quán)限的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Unity游戲嵌入Android應(yīng)用(融合為一個應(yīng)用)

    Unity游戲嵌入Android應(yīng)用(融合為一個應(yīng)用)

    嵌入項目的AndroidStudio版本和Unity版本 Unity2019 AndroidStudio2021 01 新建一個新的安卓項目 項目里新建一個button 實現(xiàn)button的點擊事件進入游戲 unity導(dǎo)出android工程 導(dǎo)出的工程文件夾放入原生的安卓項目 放入如下代碼 放入如下代碼 放入如下代碼 項目里添加UnityGameActivity.java 需要配置

    2023年04月08日
    瀏覽(26)
  • Android之動態(tài)申請權(quán)限

    Android之動態(tài)申請權(quán)限

    Android 6.0 (API 23) 之前應(yīng)用的權(quán)限在安裝時全部授予,運行時應(yīng)用不再需要詢問用戶。在 Android 6.0 或更高版本對權(quán)限進行了分類,對某些涉及到用戶隱私的權(quán)限可在運行時根據(jù)用戶的需要動態(tài)授予。 Android 6.0以下,在AndroidManifest.xml文件中注冊權(quán)限即可。 Android 6.0及其以后,既

    2024年02月04日
    瀏覽(22)
  • Android動態(tài)申請權(quán)限

    一、在AndroidManifest清單文件中聲明要開啟的權(quán)限 二、代碼中動態(tài)申請相關(guān)權(quán)限

    2024年02月06日
    瀏覽(18)
  • Android 開發(fā)中的權(quán)限申請

    ??????? 我們都知道,從 Android 6.0 開始,部分危險權(quán)限在 xml 注冊的同時,還需要動態(tài)申請。 1、需要動態(tài)申請的權(quán)限 ????????需要動態(tài)申請的權(quán)限主要分為這 9 類,當(dāng)然每類中可能不止一個權(quán)限,但只要動態(tài)申請一個就默認獲取整個類別的權(quán)限。 2、申請單個權(quán)限 ??

    2024年02月09日
    瀏覽(27)
  • android11 申請所有文件訪問權(quán)限

    android11 申請所有文件訪問權(quán)限

    Android 11 引入了強制執(zhí)行分區(qū)存儲的限制,導(dǎo)致應(yīng)用默認不能訪問外部文件。 針對以前涉及較多文件的操作,可采用申請所有文件訪問權(quán)限的方式來解決這一問題,實現(xiàn)方式如下。 (雖然這樣做安全性低,官方并不推薦這樣,但確實最快適配原有應(yīng)用程序的方式) 1. Android

    2024年02月04日
    瀏覽(29)
  • unity調(diào)試手機游戲(Android)【模擬器+真機】+設(shè)置運行時游戲橫屏

    unity調(diào)試手機游戲(Android)【模擬器+真機】+設(shè)置運行時游戲橫屏

    注:我使用的unity版本為2021.3.2f1c1 1、將平臺調(diào)整為Android 點擊“文件“ —— ”生成設(shè)置“ 在平臺選擇Android,點擊右下方的切換平臺 (如果沒有下載Android平臺包需要先下載,我的下載好后自動配置了SDK/JDK/NDK,在下載時可選。若沒有選擇下載SDK/NDK/JDK,需要自行配置) 檢查

    2024年02月08日
    瀏覽(44)
  • android 12 SD動態(tài)申請讀寫權(quán)限

    android 12 SD動態(tài)申請讀寫權(quán)限

    android 12不僅需要在AndroidManifest.xml申請讀寫權(quán)限也需要在代碼中動態(tài)的申請 關(guān)于如何動態(tài)申請讀寫權(quán)限僅需要兩步 在AndroidManifest.xml文件中申請讀寫權(quán)限 在代碼的啟動MainActivity中動態(tài)申請方法 下面是關(guān)于動態(tài)權(quán)限申請的Manifest.class類大家有興趣可以去了解下

    2024年02月11日
    瀏覽(26)
  • Android 獲取SIM卡號碼權(quán)限申請

    在AndroidManifest.xml中添加如下權(quán)限 uses-permission android:name=\\\"android.permission.READ_PHONE_STATE\\\"/ 如果你只在清單文件中添加權(quán)限卻沒有在代碼中獲取權(quán)限,代碼還是會報錯的。 報錯原因: android 6.0以上增加了動態(tài)獲取權(quán)限api,需要動態(tài)獲取手機的權(quán)限。彈出對話框詢問用戶,請求用戶

    2024年02月08日
    瀏覽(21)
  • android 11后文件讀寫訪問權(quán)限申請

    android 11后對文件讀寫訪問權(quán)限管理 與 android 10又有了新的要求,導(dǎo)致在讀寫或者訪問時出現(xiàn)error:java.io.FileNotFoundException: /storage/emulated/0/file_path open failed: EACCES (Permission denied),以下為android 11文件管理權(quán)限申請辦法 回憶android 10 文件訪問權(quán)限申請 step 1: AndroidManifest中添加權(quán)限申

    2024年02月05日
    瀏覽(21)
  • Android11及以上 文件讀寫權(quán)限申請

    Android11及以上 文件讀寫權(quán)限申請

    Android11 讀寫權(quán)限申請 Android11系統(tǒng)對應(yīng)用寫入權(quán)限做了嚴格的限制。本文介紹如何獲取文件讀寫權(quán)限。項目中 build.gradle 的 targetSdkVersion = 29 ,會出現(xiàn)讀寫問題。 當(dāng) targetSdkVersion = 29,通過設(shè)置requestLegacyExternalStorage=“true”,還能解決。 當(dāng) targetSdkVersion = 30后,需要申請所有文件

    2023年04月10日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包