2016-11-15 102 views
0

所以,我想讀從任何連接USB OTG驅動一個非常具體的文件。這是一個文本文件,應該存儲在U盤上,我需要讀取該文件,該文件有一個特定的名稱,如myFile.txt。雖然我明白這種獲得用戶輸入的方式是愚蠢的,但不方便用戶使用,這是我被告知需要實現的。如何通過存儲訪問架構得到OTG文件

但我的問題是,有很多掛載USB驅動器分。我的電話是/storage/USBStorage1,而我的朋友是/storage/[HEX_ID]。我試圖獲得所有這些,但這是不可能的。在Nexus手機中,它安裝在要求root訪問的/mnt/media_rw/[HEX_ID]上。

我搜索周圍一點點,發現SAF,但我沒有找到如何使用它來打開任何文件,而無需用戶直接選擇什麼。我不想讓選取者出現。我只想檢查是否存在[USB_OTG_PATH]/myFile.txt,如果存在,我想閱讀它。

而在旁註上,我是否需要root權限才能讀取/mnt文件夾(media_rw除外)?

+0

現代系統也將是getExternalFilesDirs交付()'[了'File'對象的一個​​變化。 – greenapps

+0

@greenapps:僅當文件恰好位於其中一個目錄中時。 OP似乎希望該文件位於任意位置。 – CommonsWare

+0

@CommonsWare:從該文件對象OP可以派生驅動器的根。從那裏他增加了他的路徑。根是'/ Android /'之前的部分。 – greenapps

回答

0

我沒有找到關於如何使用它來打開任何文件,而無需用戶直接選擇

那是因爲沒有此選項沒有任何東西。

我只想檢查[USB_OTG_PATH] /myFile.txt是否存在,如果存在,我想讀取它。

不支持。

如果文件位於由getExternalFilesDirs()getExternalCacheDirs()返回目錄之一,getExternalMediaDirs()然後您可以直接訪問它使用普通的Java文件I/O。然而,據我所知,該目錄需要爲運行你的應用程序—另一家開發商跑進試圖提前創建目錄問題的一部分被創建。因此,對於您的使用案例,這種方法不太可行,但運氣好的話我錯了,它對您有用。

我需要root acces才能讀取/ mnt文件夾(media_rw除外)嗎?

在一般情況下,是的,但在實踐中答覆設備,Android操作系統版本等

+0

不,我的文件不在外部目錄中。這應該是在一個USB棒,該應用程序應該只在棒插入時工作。 –

+0

@ III.6:「它應該在USB棒」 - 「getExternalFilesDirs()','getExternalCacheDirs()和'getExternalMediaDirs()'都會返回一個'File []'。如果該陣列具有2+條目,則第二個和後續條目位於可移動存儲設備上,例如USB OTG驅動器。這些目錄可以使用普通Java文件I/O在沒有權限的情況下讀取和寫入。 – CommonsWare

+0

但它沒有。在我的手機上,他們每個人都返回一個大小爲1的數組,並且所有人都有前綴'/ storage/emulated/0/Android /',而我的手柄安裝在'/ storage/USBstorage1'中。 –