首页 > 解决方案 > Android 10 发布后如何重新实现已弃用的方法?使用 MediaStore 和存储?

问题描述

我正在重构我的旧应用程序。最后决定迁移到Android Q/10。我的应用程序适用于声音文件,因此现在有 2 种方法已被弃用。如何以新的方式实现相同的功能?

Uri uri = MediaStore.Audio.Media.getContentUriForPath(outPath); //outPath is the path where I save my .wav file.
...
String externalRootDir = Environment.getExternalStorageDirectory().getPath();
        if (!externalRootDir.endsWith("/")) {
            externalRootDir += "/";
        }
        subDir = "media/audio/music/myfolder/";
...
//getExternalStorageDirectory() is deprecated. Here I'm making a filename for my recording

我也在使用这个常数

values.put(MediaStore.MediaColumns.DATA, outPath); //DATA deprecated

如何重新实现这些部分?这是我第一次使用 android Q(无论如何我对所有 Android 都没有多少经验)。提前致谢!

标签: androidandroid-studiorefactoringdeprecatedmediastore

解决方案


在 Android 10 中,有一个新的 MediaStore.Audio.Media.RELATIVE_PATH 可以帮助您定义保存文件的位置,问题是音频文件允许的目录是 [Alarms, Music, ‎Notifications, Podcasts, Ringtones],您不能只指定您想要的任何目录。</p>

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        collection =  MediaStore.Audio.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY); // added in @api<=29 to get the primary external storage

        // To specify a location instead of the default music directory in external
        values.put(MediaStore.Audio.Media.RELATIVE_PATH, (Environment.DIRECTORY_NOTIFICATIONS).getAbsolutePath());
    }else{
        // Your Old code
    }
Uri itemUri = resolver.insert(collection, values);

如果您不添加 MediaStore.Audio.Media.RELATIVE_PATH,该文件将保存在默认的“音乐”目录中。

我仍然不知道如何将它保存到我在 Android 10 中的包文件夹中: context.getExternalFilesDir(Environment.DIRECTORY_NOTIFICATIONS)


推荐阅读