在Android 10.0上创建文件路径的正确方法

问题描述 投票:0回答:1

我在GIFEncoder中使用此库,以便从图像生成GIF文件,该库在初始化时需要一个路径,以便如下保存最终的GIF:

gifEncoder.init(width, height, FILEPATH , GifEncoder.EncodingType.ENCODING_TYPE_NORMAL_LOW_MEMORY);

为此,我试图创建一个GIF文件并为该库提供路径:

 String gifFileName = "APP" + Constants.CURRENT_DATE + ".gif";
 String pictureFolderPath = Environment.DIRECTORY_PICTURES + Constants.BaseFolder;
 String pathImageKey = MediaStore.Images.Media.DATA;

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            Uri insertedUri = getGIFUri(context, gifFileName, pictureFolderPath);
            String correctPath = queryFilePath4Uri(context, insertedUri, pathImageKey);
            Log.d("Correct Path", correctPath.toString());
            return correctPath;
} 

在日志猫中,我可以看到路径:

2020-06-07 11:11:48.878 7570-7745/maa.app.abc D/Correct Path: /storage/emulated/0/Pictures/MYAPP/GIFs/APP20200607_101138.gif

但是当我在Android 10 (Emulator)]上进行测试时,已保存的GIF大小为0个八位字节为空,这没有任何反应,这是getGIFUriqueryFilePath4Uri方法:

 fun getGIFUri(context: Context, fileName: String, dirName: String): Uri? {
        val values = ContentValues().apply {
            put(MediaStore.Images.Media.TITLE, fileName)
            put(MediaStore.Images.Media.DISPLAY_NAME, fileName)
            put(MediaStore.Images.Media.DESCRIPTION, "APP")
            put(MediaStore.Images.Media.MIME_TYPE, "image/gif")
            put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis())
            put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis())
            put(MediaStore.Images.Media.RELATIVE_PATH, "$dirName/GIFs")
        }
        var result: Uri? = null
        val contentResolver = context.contentResolver
        contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values).let { insertUri ->
            result = insertUri
        }
        return result;
    }

fun queryFilePath4Uri(context: Context, uri: Uri, pathKey: String): String? {
    context.contentResolver?.query(uri, null, null, null, null)?.use {
        val isHas = it.moveToFirst()
        if (isHas) {
            val dataIndex = it.getColumnIndex(pathKey)
            if (dataIndex != -1) {
                val data = it.getString(dataIndex)
                if (!TextUtils.isEmpty(data)) {
                    return data
                }
            }
        }
    }
    return uri.path
}
    

我正在使用这个库到GIFEncoder,以便从图像生成GIF文件,该库在初始化时需要一个路径,以便使用它保存最终的GIF,如下所示:gifEncoder.init(width,...

android uri filepath mediastore android-10.0
1个回答
0
投票

我正在将此库用于GIFEncoder,以便从图像生成GIF文件

© www.soinside.com 2019 - 2024. All rights reserved.