簡體   English   中英

打開失敗:EACCES(權限被拒絕)?

[英]Open failed: EACCES (Permission denied)?

new File(System.getenv("SECONDARY_STORAGE") + "/foo/", "bar.txt").createNewFile()

該行代碼應該已經在SD卡的目錄foo中創建了一個文件(已安裝SD卡)。 但是System.getenv("SECONDARY_STORAGE")返回"/storage/sdcard1" 它應該可以正常工作,只是應該先創建文件的代碼才會拋出該異常

android.system.ErrnoException: open failed: EACCES (Permission denied)

注意: IOException的子類

使用System.getenv("SECONDARY_STORAGE")可以正常工作,但是,所有寫入方法都會因相同的異常而失敗。

使用"/sdcard/"可以輕松避免這種情況,但是這種方法並不可靠,因為並非所有制造商都會在根目錄中放置sdcard快捷方式。

有辦法可靠地解決這個問題嗎?

我也遇到了同樣的問題。使用權限在錯誤的位置。 這是對的:

 <manifest>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        ...
        <application>
            ...
            <activity> 
                ...
            </activity>
        </application>
    </manifest> 

該行代碼應該已經在SD卡的目錄foo中創建了一個文件(已安裝SD卡)。

過去四年左右制造的任何設備上都沒有。 在此之前,它也不可靠地工作,因為並不需要存在這樣的環境變量並指向您可以使用的任何位置。

使用System.getenv(“ SECONDARY_STORAGE”)讀取效果很好

如果通過“讀取”來表示“從該未記錄的,不受支持的環境變量指向的文件系統位置讀取”,那么它僅在碰巧在該未記錄的,不受支持的環境變量中發布半有用值的設備上起作用。

使用“ / sdcard /”可以輕松避免這種情況,但是這種方法並不可靠,因為並非所有制造商都會在根目錄中放置sdcard快捷方式。

它也沒有指向SD卡。

有辦法可靠地解決這個問題嗎?

您無法寫入可移動存儲中的任意位置。

最簡單地寫入可移動存儲在由所提供的位置getExternalFilesDirs() getExternalCacheDirs()getExternalMediaDirs()上的方法Context 如果這些返回的位置超過2個,則第二個及后續位置位於可移動存儲中,並且您具有對它們的完全讀取/寫入權限。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM