本文主要是介绍Unity通过XXpermission插件获取MANAGE_EXTERNAL_STORAGE权限,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近公司准备用Unity做一个安卓端的文件管理器功能,文件管理器已经做完了。刚开始的时候想要申请一下所有文件权限,发现在Unity里面申请所有文件权限(android.permission.MANAGE_EXTERNAL_STORAGE)相对来说比较麻烦。所以准备写一下文章记录一下如何申请到所有文件权限的。
我的
Unity版本是2021.3.27f1c2
Android版本是2022.3.1
在网上找到一个安卓使用的比较方便的插件叫XXPermissions,申请权限的界面也封装好了的。仓库地址是: https://github.com/getActivity/XXPermissions
大家假如安卓功底够好的话,可以直接看这个仓库的readme。
第一步
创建一个空的activty工程
根据仓库的readme配置好相关文件
新建个java类
叫unitypermission,复制下面的代码进去
package com.demo.myapplication;import android.app.Activity;
import android.util.Log;import java.util.List;public class unitypermission {private String TAG = "PERMISSION";private Activity _unityActivity;Activity getActivity() {if (null == _unityActivity) {try {Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayer");Activity activity = (Activity) classtype.getDeclaredField("currentActivity").get(classtype);_unityActivity = activity;} catch (ClassNotFoundException e) {} catch (IllegalAccessException e) {} catch (NoSuchFieldException e) {}}return _unityActivity;}
//调用XXpermission相关APIpublic void RequestPermission() {com.hjq.permissions.XXPermissions.with(getActivity())// 申请单个权限.permission(com.hjq.permissions.Permission.MANAGE_EXTERNAL_STORAGE)// 设置权限请求拦截器(局部设置)//.interceptor(new PermissionInterceptor())// 设置不触发错误检测机制(局部设置)//.unchecked().request(new com.hjq.permissions.OnPermissionCallback() {@Overridepublic void onGranted(List<String> permissions, boolean allGranted) {if (!allGranted) {return;}Log.i(TAG, "onGranted: 申请权限成功");}@Overridepublic void onDenied(List<String> permissions, boolean doNotAskAgain) {if (doNotAskAgain) {// 如果是被永久拒绝就跳转到应用权限系统设置页面com.hjq.permissions.XXPermissions.startPermissionActivity(getActivity(), permissions);} else {// 处理权限被拒绝的情况}}});}
}
打开build.gradle
点击绿色的按钮打jar包出来,注意上图第二个红框,可能不同的AndroidStudio出来jar包的位置不一样。
复制jar包至Unity工程的Plugins/Android下
打开Unity的project settings,勾选以下几个地方
然后plugins下面会多出下面几个文件
依次修改以下文件为
写一个C#脚本,挂到场景任意地方,然后打包至安卓手机上运行。就能够申请所有文件权限了。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Test : MonoBehaviour
{// Start is called before the first frame updatevoid Start(){AndroidJavaObject androidJavaObject = new AndroidJavaObject("com.demo.myapplication.unitypermission");androidJavaObject.Call("RequestPermission");}// Update is called once per framevoid Update(){}
}
我的项目仓库地址为
https://github.com/oneSitDown/UnityXXpermission
这篇关于Unity通过XXpermission插件获取MANAGE_EXTERNAL_STORAGE权限的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!