我对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,游戏也可以访问此目录:

  • 摩托罗拉Nexus 6
  • LG Nexus 5

  • 但似乎没有访问此目录的权限:
  • 三星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系列会造成此类麻烦?
  • 最佳答案

    好的,似乎该问题已在其他位置列出,但我找不到,因为我不知道这是确切的问题...

    https://code.google.com/p/android/issues/detail?id=197287

    API23由于某种原因将OBB的用户设置为root,而不是正确的用户,因此,该应用无法访问它。

    重新启动设备后,一切正常。

    目前,尚无明确的解决方法。

    感谢@Larry提供所有必要和有用的信息:)

    关于Android 6.0权限和OBB挂载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38355912/

    10-10 16:02