【发布时间】:2022-08-03 12:32:09
【问题描述】:
我正在尝试在我的 Android 12 设备上录制音频,授予 File and Media Permission 但 recorder.prepare(); 抛出
prepare() failed /storage/emulated/0/Music/Exotel/Media/Exotel Audio/Voice Messages/Exotel Temp/Exotel_Voice1658709937668.3gpp: open failed: EPERM (Operation not permitted)
我正在使用official documentation,但他们正在将录音保存到应用程序特定的存储中(getExternalCacheDir().getAbsolutePath();),我正在保存外部公共存储
String TempPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath()+ \"/\" + subfolder; 。无论我尝试什么,每当我尝试保存到外部共享存储时,我仍然会遇到相同的错误。
这是我的代码
String subfolder = \"Exotel/Media/Exotel Audio/Voice Messages/Exotel Temp\";
String time = new SimpleDateFormat(\"yyyyMMddhhmmss\", Locale.US).format(new Date());
String filename = Session.getUserFname()+\"_Voice\"+time+\".3gp\";
String TempPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC).getAbsolutePath()+ \"/\" + subfolder;
File dir = new File(TempPath);
if (!dir.exists()){
dir.mkdirs();
}
TempPath = TempPath+\"/\"+filename;
Log.d(TAG, \"onTouch: Temp Path \"+TempPath);
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(TempPath);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
recorder.prepare();
recorder.start();
} catch (IOException | IllegalStateException e) {
Log.e(TAG, \"prepare() failed \"+e.getMessage());
}
-
是的,您不能在 Android 11+ 设备的外部存储上创建自己的子文件夹。使用现有的公用文件夹。
-
@blackapps 我正在像其他应用程序一样在现有音乐目录中创建应用程序目录。对于图片文件夹中的 ex,您可以看到不同的应用程序子文件夹,如 Twitter、Instagram 等。
-
@blackapps 我可以看到由 file.mkdirs 创建的目录,但未创建该文件。任何想法?
-
并非所有扩展都允许在公共音乐目录中使用。试试.mp3。
-
if (!dir.exists()){ if (!dir.mkdirs()) return: }
标签: java android mediarecorder android-external-storage