经过无数次搜索,我设法找到了我的SD卡的路径而不是android模拟存储。但是当我尝试制作.txt文件夹时,最终会出现错误
/storage/37F0-1515/DCIM/100MEDIA/test.txt: open failed: EACCES (Permission denied)
我不知道为什么,因为我有
的权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我还使用
启用了权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, request2);
}
以下是我使用
的代码 File sdCard = new File("/storage/37F0-1515/DCIM/100MEDIA");
File dir = new File(sdCard.getAbsolutePath());
if (!dir.exists()) {
dir.mkdirs();
}
final File file = new File(dir, "test" + ".txt");
try {
BufferedWriter bufferedWriter = null;
bufferedWriter = new BufferedWriter(new FileWriter(file));
bufferedWriter.write("test");
bufferedWriter.close();
}
catch(Exception e){Log.v("myApp", e.toString());}
我不知道为什么安卓不会让我写信给SD卡。我还需要其他一些权限吗?
答案 0 :(得分:0)
我不知道为什么,因为我有
的权限
这些权限适用于external storage,而不是removable storage。
我不知道为什么android不会让我写sdcard
您在Android 4.4+上没有对可移动存储的任意文件系统访问权限。
答案 1 :(得分:-1)
尝试使用这些方法 -
检查uses-permission
语句是否在正确的位置,它们应位于<manifest>
以上<application>
个标记之下。格式正确 -
<manifest>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
<application>
...
<activity>
...
</activity>
</application>
</manifest>
从Android Kitkat开始,有一个新的存储策略 -
WRITE_EXTERNAL_STORAGE权限只能授予对设备上主外部存储的写访问权限。不得允许应用程序写入辅助外部存储设备,但合成权限允许的特定于程序包的目录除外。以这种方式限制写入可确保系统在卸载应用程序时清理文件。
T 然而,他可以在没有生根的情况下被利用(虽然我没有尝试过这个),因为mentioned here
编辑 -
上述漏洞利用不适用于Android 5+。这个问题没有标准的解决方案。某些漏洞可能是可用的,但它们将取决于设备特定/不可靠/根访问。 但是,可以使用存储访问框架等工具。