簡體   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