繁体   English   中英

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()对我的文件返回true ,而File.canRead()返回false 它与管理/根访问权限有关吗? adb shell是否可以让您以root身份访问系统?

PS:我已授予该应用程序的读/写权限( 根据API 23

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

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

因此,您必须检查Runtime Permission:

什么是运行时权限?

Google通过Android 6.0 Marshmallow引入了新的权限模型,该模型使用户可以更好地理解应用程序为何可能要求特定权限。 现在,不再提示用户在安装时盲目接受所有权限,而是提示用户接受在应用程序使用过程中必要时所必需的权限。

何时实施新模型?

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

此信息从这里获取:

请从此链接检查如何实施:

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

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

我想这个问题是我的情况非常独特的。 该文件是系统文件,我的应用未获得读取该文件的许可。 将我的应用程序签名系统应用程序后,该问题已得到纠正。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM