2017-01-09 85 views
0

我需要帮助才能从我的应用程序获取可连接的存储卡。 我使用的android版本是Marshmellow。我使用下面的代码请求运行时权限。Android - 外部存储卡无法从我的应用程序写入

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外壳,并能够在我的记忆卡中创建一个文件夹。

我还在我的Manifest文件中添加了下面的权限。

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

如果您需要更多详细信息,请让我知道。并预先感谢帮助我。

+3

[如何在外部SD卡上写入文件而不是在设备存储中?](http://stackoverflow.com/questions/38247666/how-to-write-a-file-in-external- SD卡和 - 未在设备存储) –

回答

0

我不知道什么我丢失或在Android上做removable storage到任意位置错误

您不具有读/写访问4.4+。

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

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

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

或者,这些应用程序使用ACTION_OPEN_DOCUMENT,ACTION_CREATE_DOCUMENTACTION_OPEN_DOCUMENT_TREE,从the Storage Access Framework

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