当前位置: 首页 > 知识库问答 >
问题:

AndroidQ,如何用正确的文件名保存与纵隔录音?

那存
2023-03-14

我想将用我的应用程序录制的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上添加子目录。

共有1个答案

金谭三
2023-03-14

正如@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值查询投影。仍然返