【问题标题】:Environment.getExternalStorageDirectory() is depreceatedEnvironment.getExternalStorageDirectory() 已弃用
【发布时间】:2020-11-03 10:19:59
【问题描述】:

我想从我的手机存储中获取目录 这是我的代码:

//"storage/emulated/0"
public String ROOT_DIR = Environment.getExternalStorageDirectory().getPath();
public String PICTURES = ROOT_DIR + "/Pictures";
public String CAMERA = ROOT_DIR + "/DCIM/camera";

}

我可以用什么来代替“getExternalStorageDirectory()”方法?

【问题讨论】:

  • 不推荐使用它并不重要。这个函数完成了它的工作。用它。没有别的了。

标签: android methods directory storage


【解决方案1】:

在 api 29 中,您需要使用 ContentResolver,请参阅我的问题: Why ContentResolver does not see added files by another app?

要从网上保存图片,你需要使用这个:

val url = URL(uRL)
val urlConnection = url.openConnection() as HttpURLConnection
urlConnection.requestMethod = "GET"
urlConnection.doOutput = true
urlConnection.readTimeout = 60000
urlConnection.connectTimeout = 20000
urlConnection.connect()
val fileName = "image.png"
val uri = insertToContentResolver(context, fileName, File(fileName).extension)
val outputStream = context.contentResolver.openOutputStream(uri)

val inputStream = urlConnection.inputStream

val buffer = ByteArray(1024)
var bufferLength: Int //used to store a temporary size of the buffer
while (inputStream.read(buffer).also { bufferLength = it } > 0) {
    outputStream.write(buffer, 0, bufferLength)
}
outputStream.close()



fun insertToContentResolver(
    context: Context,
    fileName: String,
    extension: String
): Uri? {
    val contentValues = ContentValues().apply {
        put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
        put(
            MediaStore.MediaColumns.MIME_TYPE,
            MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension)
        )
        put(
            MediaStore.MediaColumns.DATA,
            File(
                "${Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).absolutePath}/${
                    context.getString(R.string.folder_name)}",
                fileName
            ).absolutePath
        )


    }

    return context.contentResolver.insert(
        MediaStore.Files.getContentUri("external"),
        contentValues
    )
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多