首页 > 解决方案 > Android 外部存储处理

问题描述

我的应用程序中有这段代码,我已经使用了几年,但现在它已被弃用,我无法找到有关在 API-29 后需要进行哪些更改的帮助:

fun createSharedExternalImageFile(): File {
    val timeStamp:String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
    val imageFileName:String = "JPEG_" + timeStamp + "_"
    val temp: File = Environment.getStorageDirectory() // DEPRECATED METHOD
    val storageDir = File(temp,"MyAppName")
    if (!storageDir.exists()) storageDir.mkdir()
    return File(storageDir, "$imageFileName.jpg")
}

我尝试了以下代码:

fun createSharedExternalImageFile(context: Context): File {
    // Create an image file name
    //val timeStamp:String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
    val timeStamp:String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
    val imageFileName:String = "JPEG_" + timeStamp + "_"
    val temp: File = if (Build.VERSION.SDK_INT>Build.VERSION_CODES.P){
        context.dataDir
    }else{
        Environment.getExternalStorageDirectory()
    }
    val storageDir = File(temp,"MyAppName")
    if (!storageDir.exists()) storageDir.mkdir()
    return File(storageDir, "$imageFileName.jpg")
}

我在模拟器中的 API30 上收到以下错误..

java.lang.IllegalArgumentException:找不到包含 /data/data/packagename/MyAppName/JPEG_20210319_124810_.jpg 的已配置根目录

有人可以帮我举个例子吗?我想将文件存储在共享的外部文件夹中。

标签: android

解决方案


推荐阅读