我正在尝试使用Android API = 23中的bufferedReader读取系统文件,但它出现以下错误:打开失败:EACCES(权限被拒绝)。
该文件是只读的。另一方面,在adb shell中运行的'cat'命令运行正常。
此外, File.exists()为我的文件返回true ,而 File.canRead()返回false 。 是否与管理/ root访问相关? adb shell是否允许您对系统进行root访问?
P.S。:我已授予对应用的读/写权限(根据API 23 )
答案 0 :(得分:0)
Android为Android 6.0(Marshmallow)添加了新的权限模型。
所以你必须检查运行时权限:
什么是运行时权限?
借助Android 6.0 Marshmallow,Google引入了一种新的权限模型,允许用户更好地理解应用程序可能要求特定权限的原因。现在,系统会提示用户在应用程序使用期间必要时接受权限,而不是用户在安装时盲目接受所有权限。
何时实施新模式?
在您选择在应用程序中定位版本23之前,它不需要完全支持。如果您的目标是22或更低版本,您的应用程序将在安装时请求所有权限,就像在Marshmallow下运行操作系统的任何设备上一样。
此信息来自此处:
请通过以下链接查看如何实施:
答案 1 :(得分:0)
如果您的文件存在但无法阅读,请确保以下内容:
- 许可。因为你可以按照你的说法阅读其他文件,这可能不是问题
- 不是文件夹。按file.isDirectory()
检查
- 检查文件路径。例如,它不应该像这样开始:file:/...
或/home/storage//th
(当你错误地附加两个破折号时)。
答案 2 :(得分:0)
我想这个问题对我来说非常独特。该文件是一个系统文件,我的应用程序没有获得读取它的权限。在我签署我的应用作为系统应用之后,它已得到纠正。
如果应用程序具有读取此类文件的root权限,则可能是其他解决方案。
感谢大家的建议和答案!!