我需要帮助才能从我的应用程序中获取附加的存储卡。 我使用的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" />
如果您需要更多详细信息,请与我们联系。并提前感谢帮助我。
答案 0 :(得分:1)
我不确定我错过了什么或做错了
您对Android 4.4 +上的removable storage上的任意位置没有读/写权限。
其他应用程序似乎没有写入存储卡的问题。
这些应用程序是由设备制造商或自定义ROM开发人员预先安装的。
或者,这些应用正在使用getExternalFilesDirs()
,getExternalCacheDirs()
或getExternalMediaDirs()
。如果这些方法返回2个以上的位置,则第二个和后续的位置在可移动存储上,您可以读/写这些位置。
或者,这些应用正在使用来自the Storage Access Framework的ACTION_OPEN_DOCUMENT
,ACTION_CREATE_DOCUMENT
或ACTION_OPEN_DOCUMENT_TREE
。
或者,这些应用程序正在利用一些安全漏洞,希望这些漏洞能够得到修复。