Разрешение на чтение памяти Android в Unity игре
В моей Unity игре с недавних пор появилась возможность устанавливать модификации из архивов прямо через игру. На Windows и Linux всё работает безупречно, архив распаковывается по нужному пути и модификации работают, для установки достаточно перетянуть архив на exe игры, либо же просто открыть файл с помощью того же exe (и аналогично на Linux), а на Android для установки модификаций достаточно в любом файловом менеджере нажать по архиву и из списка приложений выбрать игру. Это работает. Но есть одно НО: игра не запрашивала доступ на чтение и запись внутренней памяти, поэтому при открытии архива просто вылазит сообщение о том, что нет доступа к файлу (access denied). Подробностей, как высвечивается ошибка, я писать не буду, так как это реализовано в C# коде игры через try catch. Перерыл тонну информации, сделал почти всё, что только можно было, но игра по прежнему просто не запрашивает доступ к файлам, даже в свойствах игры в разрешениях ничего нет.
В чём может быть дело? Вот код AndroidManifest.xml:
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="pub.SoprotivlenieBespolezno.MTS"
xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<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>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.PICK" />
<category android:name="android.intent.category.OPENABLE" />
<data android:mimeType="*/*" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
Ещё для "принудительного" запроса написал такой код:
async void RequestPermission()
{
AndroidRuntimePermissions.Permission[] result =
await AndroidRuntimePermissions.RequestPermissionsAsync(
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.MANAGE_EXTERNAL_STORAGE");
Debug.Log($"Запрос разрешения 'READ_EXTERNAL_STORAGE', результат: '{result[0]}'");
Debug.Log($"Запрос разрешения 'WRITE_EXTERNAL_STORAGE', результат: '{result[1]}'");
Debug.Log($"Запрос разрешения 'MANAGE_EXTERNAL_STORAGE', результат: '{result[2]}'");
}
Но, как вы уже могли догадаться, в консоли я получаю следующее:
Запрос разрешения 'READ_EXTERNAL_STORAGE', результат: Denied
Запрос разрешения 'WRITE_EXTERNAL_STORAGE', результат: Denied
Запрос разрешения 'MANAGE_EXTERNAL_STORAGE', результат: Denied
Эту проблему вообще можно ли как-то решить?