最近我注意到一些朋友说 Flexi Archive System 在安卓平台似乎无法正常工作的问题。在此,需要说明的是:在高版本的Android版本中,需要程序主动向设备申请读取权限。
为帮助所有开发者轻松掌握Flexi Archive System,这里我将提供一份“Android读写权限配置流程”详尽指南。
随着Android操作系统的不断演进,系统引入了动态权限管理机制,要求应用程序在运行时明确请求并获取用户授权。
因此,你在用户目录里创建什么目录存取什么数据都要在用户知情并且同意的情况下才能进行。如果你的应用需要更高的权限。就需要在程序中进行申请操作。
首先我们需要在程序启动入口,就完成读写权限申请。粘贴如下一段代码:
//-------------------------------------------------
// Flexi Archive System
// Copyright (c) 2024 温文. All rights reserved.
// blog: https://www.playcreator.cn
// email: yixiangluntan@163.com
//-------------------------------------------------
using UnityEngine.Android;
public class DeviceAccess
{
public static void ApplyAccess()
{
#if UNITY_ANDROID
if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
{
Permission.RequestUserPermission(Permission.ExternalStorageRead);
}
if (!Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite))
{
Permission.RequestUserPermission(Permission.ExternalStorageWrite);
}
#endif
}
}
上面一段代码用于处理权限的申请,我们在 Flexi Archive - DemoSample 脚本的 Awake 函数中调用这个函数。
private void Awake()
{
if (Application.isPlaying == false)
{
return;
}
DeviceAccess.ApplyAccess();//高版本的安卓需要向设备申请权限,才能进行读写。
DataArchiveConstData.USER_KEY = "Wenen";
DataManagerSample.instance.Init();
archiveManager = DataManagerSample.instance;
archiveID = archiveManager.GetLastArchiveID().ToString();
}
除此之外,我们还要将所需要的权限配置进AndroidManifest安卓程序的应用信息。
Unity规定开发者必须要将Android所需要的AndroidManifest,塞进指定的路径: Assets\Plugins\Android\AndroidManifest.xml。因此我们需要按照路径进行创建或者在PlayerSetting-Build下勾选CustomMainManifest,在AndroidManifest.xml配置中,在如下位置中塞入读写权限信息。
<?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.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//读写权限信息 -- 出包前删除注释
</manifest>
最后打开应用,并在应用权限管理页面中查看应用是否正常获取读写权限。