将日期字符串附加到语音消息路径时出现 Android 错误

Error in Android when attaching a date string to a voice message path

我在录制语音消息后尝试保存时收到错误消息。 它只发生在我将 dateTime 实例添加为字符串添加到语音消息路径时,如下所示:"myRecording 2015 17:33:30.3gp" 但当我将 dateTime 实例排除在外时,它永远不会发生。但是,我想将 dateTime 实例添加到路径中。

我设置路径的代码如下所示:

public VoiceRecorder() {

        DateFormat dateFormat = DateFormat.getDateTimeInstance();
        String date = dateFormat.format(new Date());

        String dir = Environment
                .getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
                + "/MyRecordings";

        File newdir = new File(dir);
        if (!newdir.exists())
            newdir.mkdirs();

        filePath = dir + "/myVoiceRecording " + date +".3gp";
    }

我收到的错误信息是:

QCMediaPlayer could not be located.... QCMediaPlayer mediaplayer NOT present error (1, -2147483648) prepare() failed

我在模拟器和 phone 上收到此错误。 由于当我不添加 dateTime 实例时它有效,我假设媒体播放器解释最终路径的方式有问题但我无法弄清楚问题可能是什么,这里有人可以帮我吗?

提前致谢!

android 文件系统中似乎不允许使用冒号“:”。 你可能可以用下划线

SimpleDateFormat formatter = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss");
Date now = new Date();
String date = formatter.format(now);
...
...
filePath = dir + "/myVoiceRecording" + date +".3gp";

您目前的通话方式如下所示: /storage/emulated/0/Music/MyRecordings/myVoiceRecording 2015 年 12 月 12 日 1:08:48 PM.3gp 请注意日期上的空格,您希望 OS 如何读取空格? 尝试在 Linux 命令行上创建它,它会失败。

如果你真的想像那样存储日期而不是时间戳,调用 System.currentTimeMillis()

是更好的方法

那么你必须用下划线替换空格:

试试这个:

DateFormat dateFormat = DateFormat.getDateTimeInstance();
    String date = dateFormat.format(new Date());
//replace spaces with underscores
    date = date.replaceAll(" ", "_");

    String dir = Environment
            .getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
            + "/MyRecordings";

    File newdir = new File(dir);
    if (!newdir.exists())
        newdir.mkdirs();


   String filePath = dir + "/myVoiceRecording " + date +".3gp";