我在Android 6.0及以上版本中,遇到了权限问题。
我正在开发的游戏使用了WRITE_EXTERNAL_STORAGE权限。在Android 6.0及以上版本中,需要显示提示框来要求用户允许此权限。
现在有人要求去掉这个提示框,也就是说,游戏不能再使用WRITE_EXTERNAL_STORAGE权限了。
从技术上讲,游戏目前没有在任何地方读写外部存储器。所有保存和缓存文件都存储在应用程序特定目录(/storage/emulated/0/Android/data/com.company.productname)中。但是,游戏必须读取(有时还要下载)OBB文件,该文件存储在/storage/emulated/0/Android/obb/com.company.productname目录中。
即使在没有WRITE_EXTERNAL_STORAGE或READ_EXTERNAL_STORAGE权限的设备上,游戏仍然可以访问此目录:
- Motorola Nexus 6 - LG Nexus 5
但是,在以下设备上似乎无法访问此目录:
- Samsung Galaxy S5、S6和S7 - Nvidia Shield平板电脑
我甚至使用Alpha测试模拟从商店下载游戏来检查它。
当通过应用设置授予对存储的权限后,一切都正常运行。
OBB文件如何挂载?
我使用的虚幻引擎4使用C的open()函数来处理OBB文件。
我正在开发的游戏使用了WRITE_EXTERNAL_STORAGE权限。在Android 6.0及以上版本中,需要显示提示框来要求用户允许此权限。
现在有人要求去掉这个提示框,也就是说,游戏不能再使用WRITE_EXTERNAL_STORAGE权限了。
从技术上讲,游戏目前没有在任何地方读写外部存储器。所有保存和缓存文件都存储在应用程序特定目录(/storage/emulated/0/Android/data/com.company.productname)中。但是,游戏必须读取(有时还要下载)OBB文件,该文件存储在/storage/emulated/0/Android/obb/com.company.productname目录中。
即使在没有WRITE_EXTERNAL_STORAGE或READ_EXTERNAL_STORAGE权限的设备上,游戏仍然可以访问此目录:
- Motorola Nexus 6 - LG Nexus 5
但是,在以下设备上似乎无法访问此目录:
- Samsung Galaxy S5、S6和S7 - Nvidia Shield平板电脑
我甚至使用Alpha测试模拟从商店下载游戏来检查它。
当通过应用设置授予对存储的权限后,一切都正常运行。
OBB文件如何挂载?
我使用的虚幻引擎4使用C的open()函数来处理OBB文件。
int32 Handle = open(LocalPath, O_RDONLY);
其中LocalPath是obb文件的完整路径:/storage/emulated/0/Android/obb/com.company.productname/main.10003.com.company.productname.obb
问题如下:
- 游戏是否需要READ/WRITE_EXTERNAL_STORAGE权限才能读取和下载OBB文件?
- 如果是,那么我如何消除要求用户授权的警告?
- 如果不需要,那么为什么三星Galaxy S系列会出现这样的问题?