android - 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 都没有多少经验)。提前致谢!
解决方案
在 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)
推荐阅读
- javascript - 如何在 Virtual Studio 代码中外部链接 Css
- javascript - 在javascript中,实例函数和函数类型的实例变量有什么区别?
- nginx - 在 nginx 中禁用客户端发起的安全重新协商
- jquery - 使用 jquery 在滚动容器中加载更多帖子
- r - 如何在 dplyr 中动态创建或调用变量和函数?
- ideamart - IdeaMart订阅API中地址格式无效
- javascript - 更改语言后未翻译 Vue js 道具
- applescript - Applescript 无法识别全屏窗口 (?)
- python - 站点解析 myip.ms
- ubuntu - 当 ctrl-alt-F 停止工作时,如何让 x2go 退出全屏模式?