【问题标题】:Android: unable to read a file using bufferedReader whereas cat command run in adb shell works fineAndroid:无法使用 bufferedReader 读取文件,而在 adb shell 中运行的 cat 命令工作正常
【发布时间】:2017-10-26 21:50:49
【问题描述】:

我正在尝试使用 Android API=23 中的 bufferedReader 读取系统文件,但它给出以下错误:打开失败:EACCES(权限被拒绝)

该文件是只读的。另一方面,在 adb shell 中运行的“cat”命令运行良好。

此外,File.exists() 为我的文件返回 true,而 File.canRead() 返回 false是否与管理/root 访问权限有关? adb shell 是否授予您对系统的 root 访问权限?

P.S.:我已授予该应用的读/写权限(根据 API 23

【问题讨论】:

  • 你能在这里给出文件的路径吗?
  • 发布你的清单
  • 没有。我已经考虑到了这一点。我可以轻松阅读其他文件!
  • 您应该使用 Manifest.permission.READ_EXTERNAL_STORAGE API = 23 中的 requestPermissions

标签: java android shell bufferedreader file-permissions


【解决方案1】:

Android 为 Android 6.0 (Marshmallow) 添加了新的权限模型。

http://www.captechconsulting.com/blogs/runtime-permissions-best-practices-and-how-to-gracefully-handle-permission-removal

所以你必须检查运行时权限:

什么是运行时权限?

在 Android 6.0 Marshmallow 中,Google 引入了一种新的权限模型,让用户可以更好地了解应用程序为何会请求特定权限。与用户在安装时盲目地接受所有权限不同,现在会提示用户在应用程序使用过程中根据需要接受权限。

何时实施新模型?

在您选择应用程序中的版本 23 之前,它不需要完全支持。如果您的目标是 22 或更低版本,您的应用程序将在安装时请求所有权限,就像在运行低于 Marshmallow 的操作系统的任何设备上一样。

此信息取自这里:

请通过此链接查看如何实施:

http://www.captechconsulting.com/blogs/runtime-permissions-best-practices-and-how-to-gracefully-handle-permission-removal

【讨论】:

  • 我添加了运行时权限检查,并在运行时授予了读/写权限。这不是问题。就是这个文件。
  • 我检查了这个文件的权限(使用 adb shell)并得到“只读”。 adb shell 命令 -cat 对这个文件工作正常。是因为在 adb shell 期间授予了 root 访问权限吗?
  • 那个文件在哪里??
  • 您是在模拟器还是物理设备上运行? /sdcard 路径是否存在?
  • 该文件是系统文件。我在物理设备上运行它。
【解决方案2】:

如果您的文件存在但无法读取,请确认以下几点:
- 允许。因为你说的可以读取其他文件,所以可能没问题。
- 它不是文件夹。通过file.isDirectory()查看。
- 检查您的文件路径。例如,它不应该这样开头:file:/.../home/storage//th(当您错误地附加两个破折号时)。

【讨论】:

  • 它不是文件夹。由于 cat FILEPATH 返回了我想要的输出。
  • 我上面提到的另一个常见问题是您的文件路径。
  • 通过记录两个属性来检查它们:-file.isDirectory()-file.getAbsolutePath()
  • 日志属性的输出:isDirectory: false; getAbsolutePath: 返回正确的路径;存在():真;可以读取():假。以为文件的权限是只读的!!
  • 请检查最终条件。 - 文件路径,并用您的代码更新您的问题。
【解决方案3】:

我想这个问题对于我的案例来说非常独特。该文件是一个系统文件,我的应用程序没有被授予读取它的权限。在我将我的应用签署系统应用后,该问题已得到纠正。

如果应用程序将具有读取此类文件的 root 权限,则可能的其他解决方案可能是。

感谢大家的建议和回答!!

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 2015-02-28
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    相关资源
    最近更新 更多