Android:无法使用bufferedReader读取文件,而在adb shell中运行的cat命令工作正常

时间:2017-05-26 05:22:07

标签: java android shell bufferedreader file-permissions

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

该文件是只读的。另一方面,在adb shell中运行的'cat'命令运行正常。

此外, File.exists()为我的文件返回true ,而 File.canRead()返回false 是否与管理/ root访问相关? adb shell是否允许您对系统进行root访问?

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

如果您的文件存在但无法阅读,请确保以下内容:
- 许可。因为你可以按照你的说法阅读其他文件,这可能不是问题 - 不是文件夹。按file.isDirectory()检查 - 检查文件路径。例如,它不应该像这样开始:file:/.../home/storage//th(当你错误地附加两个破折号时)。

答案 2 :(得分:0)

我想这个问题对我来说非常独特。该文件是一个系统文件,我的应用程序没有获得读取它的权限。在我签署我的应用作为系统应用之后,它已得到纠正。

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

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