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

Android: unable to read a file using bufferedReader whereas cat command run in adb shell works fine

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

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

此外,File.exists() returns true 对于我的文件,而 File.canRead() returns假是否与 administrative/root 访问有关? adb shell 是否授予您系统的 root 访问权限?

P.S.:我已授予该应用 Read/Write 权限( 根据 API 23

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 以下的任何设备 运行 和 OS 上一样。

此信息取自此处:

请检查link 的实施方法:

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

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

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

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

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