【问题标题】:open Failed:EROFS read only file system android打开失败:EROFS只读文件系统android
【发布时间】:2014-06-01 20:14:43
【问题描述】:

我正在尝试播放声音并从手机的麦克风录制,然后将其写入文件(3gp 格式)。
我出于某些测试目的使用了线程。问题是我收到类似

的错误
> caused by libcore.io.ErrnoException: open failed: EROFS (read only file system)

虽然我没有尝试访问任何系统文件。 我环顾四周,发现this

我添加了写入/读取权限,但它仍然不起作用。

这是产生错误的代码:

public void startRecording(){

    MediaRecorder mRecorder = new MediaRecorder();
    mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mRecorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"xfile.3gp");
    mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    try {
        mRecorder.prepare();
        mRecorder.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

和线程块:

super.onCreate(savedInstanceState);  
 setContentView(R.layout.activity_main);

Thread thread=new Thread(new Runnable()
{
    public void run()
    {
        try 
        {
            genTone();
        } 
        catch (IOException e) 
        {
            // TODO Auto-generated catch block                                                                                                                                                                                          
            e.printStackTrace();
        }
        handler.post(new Runnable()
        {
            public void run()
            {
                playSound();
            }                                                                                    });
    }
});
thread.start();

播放声音方法

void playSound(){
        AudioTrack audioTrack= null;
        try{
        audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, generatedSnd.length, AudioTrack.MODE_STATIC);
        audioTrack.write(generatedSnd, 0, generatedSnd.length);

        audioTrack.play();
        Thread thr=new Thread(new Runnable(){
            public void run(){
                startRecording();
            }
        });
        thr.start();

        }
        catch(Exception e)
        {
            System.out.print(e);
        }
}

【问题讨论】:

    标签: android multithreading file audio io


    【解决方案1】:

    我很晚才评论这个问题,但我确信我可以帮助别人。

    我正在开发一个通话记录器应用程序并且遇到了同样的错误。我在 android 4.4.2 上检测到该错误。我通过卸载 sdcard 解决了这个问题。我知道这不是解决方案。但你也可以使用它。

    【讨论】:

      【解决方案2】:

      试试

      Environment.getExternalStorageDirectory().getAbsolutePath()+"/xfile.3gp"
      

      而不是

      Environment.getExternalStorageDirectory().getAbsolutePath()+"xfile.3gp"
      

      请注意,您的版本可能最终会是

      /sdcardxfile.3gp
      

      然后

      /sdcard/xfile.3gp
      

      因此出现read only file system 错误

      【讨论】:

      • 哦,好吧,我没注意。谢谢。现在文件显示但无法播放。您认为问题仍然存在于文件或线程中吗?
      • 如果文件中有数据,那么应该没问题,可能是播放器。如果其大小为 0,则表示出现问题。
      • 里面有数据。但我不认为它很好,因为在 Matlab 中它不可读。
      • 您是否正确地停止了录制? mRecorder.stop();如果不调用音频文件头将无法正确写入。
      • 我知道。但我需要一个计时器,因为它应该运行一秒钟。我想弄清楚如何添加计时器。
      猜你喜欢
      • 2016-01-23
      • 2015-06-08
      • 2015-01-22
      • 1970-01-01
      • 2015-01-02
      • 2014-04-19
      • 2019-09-30
      • 2012-12-08
      • 1970-01-01
      相关资源
      最近更新 更多