Android 5+ 个文件已保存 "incorrect"
Android 5+ File saved "incorrect"
我写了一个小 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找不到文件,也找不到其他应用。
一些细节:
- Android 6
- 文件名错误(2131099680ggj.3gp 而不是 ggj.3gp)
- 文件保存在没有特定文件夹的内部存储器中,而不是保存在名为 "TrueCapture"
的新文件夹中的外部存储器(SD 卡在智能手机中)中
- 除了智能手机的资源管理器应用程序外,似乎没有其他应用程序知道此文件
R.string.app_name
是在 R
class 中分配给您的资源的 ID,int
。
要获取 String
资源,您可能需要使用 Context
的 getString()
方法。
像这样的东西应该可以工作:
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
权限添加到您的清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我写了一个小 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找不到文件,也找不到其他应用。
一些细节:
- Android 6
- 文件名错误(2131099680ggj.3gp 而不是 ggj.3gp)
- 文件保存在没有特定文件夹的内部存储器中,而不是保存在名为 "TrueCapture" 的新文件夹中的外部存储器(SD 卡在智能手机中)中
- 除了智能手机的资源管理器应用程序外,似乎没有其他应用程序知道此文件
R.string.app_name
是在 R
class 中分配给您的资源的 ID,int
。
要获取 String
资源,您可能需要使用 Context
的 getString()
方法。
像这样的东西应该可以工作:
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
权限添加到您的清单中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />