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

Android 5+文件保存“不正确”

邵飞宇
2023-03-14
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;
    }
}

一些细节:

  • Android6
  • 文件名错误(2131099680ggj.3gp而不是ggj.3gp)
  • 将文件保存在内部存储中,而不是保存在名为“TrueCapture”的新文件夹中的外部存储(SD卡在智能手机中)中。
  • 除了Smartphone的explorer应用程序之外,似乎没有其他应用程序知道此文件

共有1个答案

潘学民
2023-03-14

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);

// ...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 类似资料:
  • 问题内容: 我必须对数据库类使用SQLPLUS,我们的第一个任务是简单保存。 我按照说明进行了操作。(我正在使用PuTTY来访问sqlplus) “在本练习中使用以下SQL命令,并尝试使用SAVE和SPOOL命令来保存SQL命令并输出到外部文件。 对于此实验,请执行以下操作: 在SQL>提示符下,键入(或如果文件已存在),然后单击;然后键入任何SQL命令,这些命令将保存到test.sql文件。稍后

  • 我正在使用redis。数据库是 键入时: redis cli保存 我不知道在哪里倾倒。rdb保存到(因为redis是作为服务启动的,而不是在我的本地目录中)。 > 如何找到redis保存dump.rdb的位置? 有什么方法可以指定一个文件名来“保存”,所以我键入如下内容: redis cli保存~/db-2012-06-24。rdb公司 谢啦

  • 通过日志收集系统将分散在数百台服务器上的数据集中存储在某中心服务器上,这是运维最原始的需求。早年的 scribed ,甚至直接就把输出的语法命名为 <store>。Logstash 当然也能做到这点。 和 LogStash::Inputs::File 不同, LogStash::Outputs::File 里可以使用 sprintf format 格式来自动定义输出到带日期命名的路径。 配置示例

  • 例子 $ gcc -save-temps a/foo.c $ ls foo.* foo.c foo.i foo.o foo.s $ gcc -save-temps=obj a/foo.c -o a/foo $ ls a foo foo.c foo.i foo.o foo.s 技巧 如上所示,使用选项-save-temps可以保存gcc运行过程中生成的临时文件。这些中间文件的名字是

  • 问题内容: 我正在使用纯Javascript开发文本编辑器。我想要这样,以便当用户单击“保存”按钮时,编辑器将下载文件。我已经部分工作了: 该文件已下载,但问题在于该文件名为“ download”。 问题 :如何将文件名更改为所需的任何名称,例如? 问题答案: 用锚链接替换“保存”按钮,并动态设置新属性。适用于Chrome和Firefox:

  • 我试图在一个特定文件夹中保存多个图像第一个图像保存正确,但下一个图像只是替换第一个图像。如何保存多个图像?如何动态命名并使用相同的名称保存图像,但使用不同的扩展名,如image、image1、image2。。。下面是我的代码