【问题标题】:MediaRecorder prepare() failed /storage/emulated/0/: open failed: EPERM (Operation not permitted)MediaRecorder prepare() failed /storage/emulated/0/: open failed: EPERM (Operation not allowed)
【发布时间】:2022-08-03 12:32:09
【问题描述】:

我正在尝试在我的 Android 12 设备上录制音频,授予 File and Media Permissionrecorder.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


【解决方案1】:

文件路径 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC + "/" + getString(R.string.app_name) + "/" + getString(R.string.voice_messages));

【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 2021-12-04
    • 2019-04-04
    • 2019-07-24
    相关资源
    最近更新 更多