首页 > 解决方案 > Android 写入 /sdcard/

问题描述

我需要将图像保存到/sdcard/sample/0/b/image.png。我试过这个:

val dir = File("/sdcard/sample/0/b/")
dir.mkdirs()

val image = File(dir, "image.png")
image.createNewFile()

var out: FileOutputStream? = null
try {
    out = FileOutputStream(image)
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out)
} finally {
    out?.close()
}

而且我总是收到该文件不存在。另外,我尝试用 Environment.getExternalStorageDirectory().path 替换“/sdcard”,但结果是一样的。

java.io.IOException: No such file or directory
    at java.io.UnixFileSystem.createFileExclusively0(Native Method)
    at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
    at java.io.File.createNewFile(File.java:1000)

在清单中,为了测试,我添加了

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

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

标签: androidkotlinandroid-bitmapfileoutputstream

解决方案


我应该使用

val permissions = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE)
requestPermissions(permissions, 0x512)

即使我添加了清单 sdk-23 的权限

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

推荐阅读