Android - 外部存储卡无法从我的应用程序写入

时间:2017-01-09 17:44:07

标签: android android-sdcard android-developer-api

我需要帮助才能从我的应用程序中获取附加的存储卡。 我使用的Android版本是Marshmellow。我使用以下代码请求了运行时权限。

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
            (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE);
    } 

 @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == REQUEST_WRITE_STORAGE) {
        if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
            Log.d(TAG, "Permission Granted");
        }
    }
}

我还检查了设置并授予了写入权限。 以下是我手机的两个存储位置

/storage/emulated/0 (Internal Memory, Writable)
/storage/9C33-6BBD (SDCard, Not writable, only readable)

我尝试下面的代码只是为了检查我的存储卡是否可写

File file = new File("/storage/9C33-6BBD");
file.canWrite() // returns false every time

我不确定我错过了什么或做错了什么,其他应用似乎没有写入存储卡的问题。

我还使用了adb shell,并且能够在我的存储卡中创建一个文件夹。

我还在我的清单文件中添加了以下权限。

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

如果您需要更多详细信息,请与我们联系。并提前感谢帮助我。

1 个答案:

答案 0 :(得分:1)

  

我不确定我错过了什么或做错了

您对Android 4.4 +上的removable storage上的任意位置没有读/写权限。

  

其他应用程序似乎没有写入存储卡的问题。

这些应用程序是由设备制造商或自定义ROM开发人员预先安装的。

或者,这些应用正在使用getExternalFilesDirs()getExternalCacheDirs()getExternalMediaDirs()。如果这些方法返回2个以上的位置,则第二个和后续的位置在可移动存储上,您可以读/写这些位置。

或者,这些应用正在使用来自the Storage Access FrameworkACTION_OPEN_DOCUMENTACTION_CREATE_DOCUMENTACTION_OPEN_DOCUMENT_TREE

或者,这些应用程序正在利用一些安全漏洞,希望这些漏洞能够得到修复。