java - Android 5+ 文件已保存 "incorrect"

标签 java android storage record voice

我写了一个小的 Android 应用程序来录制音频并将其保存在智能手机的磁盘上。现在我遇到了问题,它以错误的名称保存在错误的位置,我不明白为什么。 (我是 Android 编程的新手)

public void startRecording(View view) {
    File folder = new File(Environment.getExternalStorageDirectory() + "/" + R.string.app_name);
    file_name = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + R.string.app_name;

    if(!folder.exists()) {
        boolean created = folder.mkdirs();
        if(!created) { Log.i(LOG_TAG, "Could not create folder/s."); return; }
    }

    if(editText.getText() != null)
        file_name += editText.getText() + ".3gp";
    else
        file_name += Calendar.getInstance().getTime() + ".3gp";

    outputFile = new File(file_name);

    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setOutputFile(file_name);
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);

    Toast.makeText(CaptureActivity.this, R.string.toast_recording_start, Toast.LENGTH_SHORT).show();

    try {
        mediaRecorder.prepare();
        mediaRecorder.start();
    } catch (IOException e) {
        Log.e(LOG_TAG, "prepare() failed");
        Toast.makeText(CaptureActivity.this, R.string.toast_recording_failed, Toast.LENGTH_LONG).show();
        mediaRecorder = null;
    }
}

文件应保存在名为 TrueCapture 的文件夹中,文件本身应称为 ggj.3gp 。 但是该文件以名称 2131099680ggj.3gp 保存在内部存储中。 下一个问题是,我只能通过智能手机的资源管理器应用程序找到文件。 PC 找不到文件,也找不到其他应用程序。


一些细节:

  • 安卓 6
  • 文件名错误(2131099680ggj.3gp 而不是 ggj.3gp)
  • 文件保存在没有特定文件夹的内部存储器中,而不是保存在名为“TrueCapture”的新文件夹中的外部存储器(SD 卡在智能手机中)
  • 除了智能手机的资源管理器应用程序外,似乎没有其他应用程序知道此文件

最佳答案

R.string.app_name 是分配给您在 R 类中的资源的 ID,一个 int

要获取 String 资源,您可能需要使用 ContextgetString() 方法。

像这样的东西应该可以工作:

String ext = ".3gp";

File folder = new File(Environment.getExternalStorageDirectory() + "/" + getString(R.string.app_name));
if(!folder.exists()) {
    folder.mkdirs();
}

file_name = folder.getAbsolutePath() + "/";

if(editText.getText().length() > 0) {
    file_name += editText.getText().toString() + ext;
} else {
    file_name += Calendar.getInstance().getTimeInMillis() + ext;
}

File outputFile = new File(file_name);

// ...

您还需要将 WRITE_EXTERNAL_STORAGE 权限添加到您的 list :

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

关于java - Android 5+ 文件已保存 "incorrect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38916342/

相关文章:

java - 如何在两个反向代理后面配置keycloak?

java - 如何存储用户日志

java - 使用 Java Robots 类在屏幕上定位事物

javascript - 在 Android 上使用 JQM 和 PhoneGap 闪烁/闪烁

android - 简单的应用程序,可以下载并安装到 Android 手机上,一旦单击该应用程序,就会在手机的默认浏览器中打开一个 URL

java - Android - 存储对象的最佳存储方法(数据库或json/内部存储)

java - 在同一项目中使用 Java 和 Kotlin Activity

android - 使用耳机按键事件

windows - Angular 2 如何从存储中删除列表项

php - 在哪里存储上传的文件(声音、图片和视频)