簡體   English   中英

無法在Android上寫入SD卡

[英]Cannot write to sd card on android

我在Android 4.4設備上寫入SD卡時遇到問題。 我正在編寫一個使用getExternalFilesDirs()方法獲取到SD卡上其目錄路徑的應用程序。 但是,當我嘗試將數據存儲在目錄中時,出現錯誤:

EACCES (Permisson denied)

內存和SD卡上Android / data /中的應用程序目錄由不同的Linux用戶擁有。 我設備上的任何其他應用程序都可以正常運行。 該應用程序可以在具有該SD卡的其他設備上運行。

您需要在AndroidManifest.xml中添加此權限:

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

我認為您放錯了這條線。 仔細檢查這一行

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

你把這條線放在哪里?

此行應在<application/>范圍之外

像這樣

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

為了使getExternalFilesDirs返回sdcard的路徑,OEM必須在設備特定的init.rc文件中設置SECONDARY_STORAGE環境變量,如下所述: https ://source.android.com/devices/storage/config-example.html

在此處查看getExternalFilesDirs的來源: http : //androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/app/ContextImpl.java#1039

該值是從Environment.buildExternalStorageAppFilesDirs獲得的。 在此處查看該來源: http : //androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java#206

該值取決於mExternalDirsForApp,后者又通過讀取SECONDARY_STORAGE變量的內容進行填充: http : //androidxref.com/5.1.1_r6/xref/frameworks/base/core/java/android/os/Environment.java# 136

如您所見,如果未設置SECONDARY_STORAGE變量,則不會返回sdcard路徑。 您可以通過轉至adb shell並查看echo $ SECONDARY_STORAGE的輸出來進行交叉檢查。

使用getExternalFilesDir()

它會將路徑返回到輔助存儲SD卡上Android / data / data / your_package /中的files文件夾。 它用於存儲您的應用程序所需的任何文件(例如,從Web下載的圖像或緩存文件)。 卸載應用后,該文件夾中存儲的所有數據也將消失。

在這里您可以在輔助存儲中寫入文件,即(您的微型SD卡)

如果要寫入輔助存儲的外部或根目錄,則必須使用存儲訪問框架

暫無
暫無

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

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