【问题标题】:Programmatically enable storage android以编程方式启用存储android
【发布时间】:2016-10-08 20:16:17
【问题描述】:

我正在尝试使用 C++ Android NDK 遍历 SD 卡中的文件,只是为了让用户在他的设备中选择一个文件,我使用的是 dirent.h 标头,我从java用方法Environment.getExternalStorageDirectory()

当我在具有 Android 4.4.2 的 BlueStacks(在 Windows 10 上)上对其进行测试时,该函数会正确读取文件名,但是当我在具有 Android 7 的 Nexus 6p 上对其进行测试时,它会失败,并且它给了我 errno = 13,这意味着:

#define EACCES      13  /* Permission denied */

在下面的帖子中,我可以找到发生这种情况的原因。

https://stackoverflow.com/a/36336679/5166295

那么,是否有任何以编程方式启用该选项的方法?

这只是在我调试应用程序时,并且在最终版本(带有 APK)中这会消失吗?

或者,有什么方法可以获取原始路径而不是符号链接?

或者,我是否必须告诉我的用户手动启用该选项?

【问题讨论】:

  • 你的清单文件中有uses-permission READ_EXTERNAL_STORAGE吗?
  • 是的,我有 READ 和 WRITE
  • READ 是无用的,因为WRITE 意味着READ。

标签: java android path filepath


【解决方案1】:

我使用 Environment.getExternalStorageDirectory() 方法从 java 获取 SD 路径

getExternalStorageDirectory() 与约 20 亿 Android 设备上的 SD 卡无关。那指向external storage,而不是removable storage。

是否有任何以编程方式启用该选项的方法?

您的 Java 代码可以request READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE at runtime。我不相信有办法直接从 NDK 请求这个。

这只是在我调试应用程序时,并且在最终版本(带有 APK)中这会消失吗?

没有。

【讨论】:

    【解决方案2】:

    貌似从Android 6开始权限发生了变化,所以现在变成了运行时权限的形式,使用的时候需要请求权限,所以在app运行的时候默认是不开启的已安装。

    https://source.android.com/devices/tech/config/runtime_perms.html

    【讨论】:

      猜你喜欢
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2011-08-09
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多