Unity-Android 权限相关问题
1. 生成AndroidManifest
File -> buildSetting->playerSetting->Android->publishing Settings
权限添加位置:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:theme="@style/UnityThemeSelector">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
<!--网络相关-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--防止通话过程中锁屏-->
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!--视频权限-->
<uses-permission android:name="android.permission.CAMERA"/>
<!--录音权限-->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--修改音频设置-->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<!--蓝牙权限-->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<!--蓝牙连接权限,此权限还需在运行应用时动态申请,否则 Android 12 及以上的设备蓝牙无法正常工作-->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!--外置存储卡写入权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- Android11额外添加 -->
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<!--蓝牙 startBluetoothSco 会用到此权限-->
<uses-permission android:name="android.permission.BROADCAST_STICKY"/>
<!--获取设备信息-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--允许应用程序使用camera硬件资源-->
<uses-feature android:name="android.hardware.camera"/>
<!--自动对焦-->
<uses-feature android:name="android.hardware.camera.autofocus"/>
</manifest>
2. 连续请求多个权限
- unity请求权限的时候,如果连续请求多个权限,因为unity焦点问题,会屏蔽掉第一个权限以外的权限申请。这个可以用以下代码解决:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Android;
public class PermissionManager : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
#if UNITY_ANDROID && !UNITY_EDITOR
StartCoroutine(AskForPermissions());
#endif
}
private IEnumerator AskForPermissions()
{
//判断是否已经包含该权限,防止每次启动应用都需要请求
List<bool> permissions = new List<bool>() { false, false, false, false };
List<bool> permissionsAsked = new List<bool>() { false, false, false, false };
List<Action> actions = new List<Action>()
{
//注册请求事件
new Action(() => {
permissions[0] = Permission.HasUserAuthorizedPermission(Permission.Microphone);
if (!permissions[0] && !permissionsAsked[0])
{
Permission.RequestUserPermission(Permission.Microphone);
permissionsAsked[0] = true;
return;
}
}),
new Action(() => {
permissions[1] = Permission.HasUserAuthorizedPermission(Permission.Camera);
if (!permissions[1] && !permissionsAsked[1])
{
Permission.RequestUserPermission(Permission.Camera);
permissionsAsked[1] = true;
return;
}
}),
new Action(() => {
permissions[2] = Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite);
if (!permissions[2] && !permissionsAsked[2])
{
Permission.RequestUserPermission(Permission.ExternalStorageWrite);
permissionsAsked[2] = true;
return;
}
}),
new Action(() => {
permissions[3] = Permission.HasUserAuthorizedPermission("android.permission.READ_PHONE_STATE");
if (!permissions[3] && !permissionsAsked[3])
{
Permission.RequestUserPermission("android.permission.READ_PHONE_STATE");
permissionsAsked[3] = true;
return;
}
})
};
for(int i = 0; i < permissionsAsked.Count; )
{
//invoke 同步请求,只有当结果返回的时候才会执行下一步操作,会先将线程等待
actions[i].Invoke();
if(permissions[i])
{
++i;
}
yield return new WaitForEndOfFrame();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!