2017-05-26 18 views
0

我想在Android API = 23中使用bufferedReader读取系统文件,但它给出了以下错误:打开失败:EACCES(Permission否认)Android:无法使用bufferedReader读取文件而cat命令在adb shell中运行正常

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

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

P.S.:I授予读/写权限的应用程序(如每个API 23

+0

[Android棉花糖请求权限?]的可能重复(https://stackoverflow.com/questions/33666071/android-marshmallow-request-permission) –

+0

您可以在此处提供文件路径吗? –

+1

邮寄清单 –

回答

0

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

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

谢谢大家的建议和答案!

0

的Android增添了新的权限模型为Android 6.0(棉花糖)。

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

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

什么是运行时权限?

借助Android 6.0 Marshmallow,Google推出了一种新的权限模式,允许用户更好地理解应用程序为什么可能请求特定的权限。用户不会在安装时盲目地接受所有权限,而是会提示用户在应用程序使用期间接受权限,因为这些权限是必需的。

何时实施新模型?

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

此信息是从这里取:

请查看如何从这个链接实现:

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

+0

我已经添加了运行时权限检查,并在运行时授予了读/写权限。这不是问题。这是特别的这个文件。 – PseudoCoder

+0

我检查了这个文件的权限(使用adb shell)并获得了“只读”。 Adb shell命令-cat对这个文件工作正常。是否因为在adb shell期间授予root访问权限? – PseudoCoder

+0

该文件位于哪里? –

0

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

+0

它不是一个文件夹。由于猫FILEPATH返回我所需的输出。 – PseudoCoder

+0

上面提到的另一个常见问题是您的文件路径。 –

+0

通过记录两个属性来检查它们: - file.isDirectory() - file.getAbsolutePath() –

相关问题