我想将用我的应用程序录制的mp3文件存储到带有MediaStore的音乐文件夹中,以便在Android 10的新“范围存储”中使用。
此方法效果很好,但这些文件使用时间戳命名(例如1576253519449),没有.mp3
扩展名。
如果我用文件管理器手动添加扩展名,则文件将被正确记录。
如何使用filename+“.mp3”
来命名文件?
String fileName; //Obtained by intent
MediaRecorder audioRecorder;
Uri audiouri;
ParcelFileDescriptor file;
private void startRecording() throws IOException {
ContentValues values = new ContentValues(4);
values.put(MediaStore.Audio.Media.TITLE, fileName);
values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (System.currentTimeMillis() / 1000));
values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp3");
values.put(MediaStore.Audio.Media.RELATIVE_PATH, "Music/Recordings/");
audiouri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
file = getContentResolver().openFileDescriptor(audiouri, "w");
if (file != null) {
audioRecorder = new MediaRecorder();
audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
audioRecorder.setOutputFile(file.getFileDescriptor());
audioRecorder.setAudioChannels(1);
audioRecorder.prepare();
audioRecorder.start();
}
}
还有一个问题:mediastore.audio.media.relative_path
只适用于Android 10。如何保持与旧版本的逆转兼容性?
编辑:
为了实现逆转兼容性,您只需删除values.put(mediastore.audio.media.relative_path,“Music/recordings/”);
:文件将直接保存在Music目录中。
或使用if(build.version.sdk_int>=build.version_codes.q)
仅在Android 10上添加子目录。
正如@BlackApps所建议的,可以使用display_name
属性。
根据这篇Android开发人员最佳实践博客,(我就是这样)应该使用MediaStore API。 在文档中挖掘,我找不到相关的函数。 这是我在科特林的审判: 提前感谢! 编辑 多亏了PerracoLabs 图像总是得到一个由数字组成的名称,如下所示: 这就给我们带来了第二个问题: 更改为: 这是原木 我注意到与名称匹配,所以我尝试添加:
一些细节: Android6 文件名错误(2131099680ggj.3gp而不是ggj.3gp) 将文件保存在内部存储中,而不是保存在名为“TrueCapture”的新文件夹中的外部存储(SD卡在智能手机中)中。 除了Smartphone的explorer应用程序之外,似乎没有其他应用程序知道此文件
我正在用ffmpeg保存vob文件中的单帧。 FF探针显示我的vob文件: Stream#0:1[0x1e0]:视频: mpeg2video(Main), yuv420p(tv),720x480[SAR 8:9 DAR 4:3],隐藏式字幕,3750 kb/s,29.97 fps,29.97 tbr,90ktbn,59.94 tbc 我的命令行是 ffmpeg-i文件1。vob-SS10-q:v2
问题内容: 我正在使用纯Javascript开发文本编辑器。我想要这样,以便当用户单击“保存”按钮时,编辑器将下载文件。我已经部分工作了: 该文件已下载,但问题在于该文件名为“ download”。 问题 :如何将文件名更改为所需的任何名称,例如? 问题答案: 用锚链接替换“保存”按钮,并动态设置新属性。适用于Chrome和Firefox:
我试图从设备的外部存储中删除音频文件(例如文件夹中)。在分析了示例之后,我最终得到了以下API 28及更早版本的解决方案: 我注意到上面的代码只从纵隔数据库中删除曲目,而不从设备中删除(文件在重新引导后重新添加到纵隔中)。因此,我修改了该代码以查询列,然后使用该信息删除相关文件。这按预期工作。 但是现在Android Q引入了作用域存储,(和)现在不推荐使用,因为应用程序可能无法访问这些文件。只能
我想从图库中选择一个图像,然后使用它将图像加载到ImageView项中。 但是图像没有以正确的方式旋转,所以我应该使用ExifInterface类,并且exif构造函数希望文件的路径是字符串,而不是URI。 为了将URI转换为字符串,我编写了以下方法: 问题从这里开始... 结果变量总是返回null。我尝试了stackoverflow中的许多解决方案,如下所示: 我试图用null值查询投影。仍然返