首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音频记录器无效状态(坏FilePath?)

音频记录器无效状态(坏FilePath?)
EN

Stack Overflow用户
提问于 2018-11-11 05:48:45
回答 1查看 63关注 0票数 0

我有一个录音机,我试着做出来,看看它是如何工作的。然而,当我运行它时,我会得到错误:

代码语言:javascript
复制
E/MediaRecorder: start called in an invalid state: 4

所以我做了一些googlejitzu,并发现我的文件路径是错误的。这是我的密码:

代码语言:javascript
复制
final MediaRecorder recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile("Test");

    System.out.println("Hello");
    try {
        recorder.prepare();
    } catch (IOException e) {
        e.printStackTrace();

    }
    recorder.start();
    CountDownTimer countDownTimer = new CountDownTimer(30000, 1000) {
        @Override
        public void onTick(long l) {

        }

        @Override
        public void onFinish() {
            recorder.stop();
        }
    }.start();

因此,我想我想知道如何在电话上创建一个文件路径目录,以便将音频保存到。

错误是:

代码语言:javascript
复制
    11-11 01:49:48.275 23703-23703/com.example.arege.dayatalisten W/System.err: java.io.FileNotFoundException: Test: open failed: EROFS (Read-only file system)
11-11 01:49:48.276 23703-23703/com.example.arege.dayatalisten W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:455)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:247)
        at java.io.RandomAccessFile.<init>(RandomAccessFile.java:128)
        at android.media.MediaRecorder.prepare(MediaRecorder.java:834)
        at com.example.arege.dayatalisten.ListeningToTheWorld.onStartCommand(ListeningToTheWorld.java:47)
        at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3432)
        at android.app.ActivityThread.-wrap21(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1633)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6316)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:872)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:762)
    Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
11-11 01:49:48.277 23703-23703/com.example.arege.dayatalisten W/System.err:     at libcore.io.Posix.open(Native Method)
        at libcore.io.BlockGuardOs.open(BlockGuardOs.java:187)
        at libcore.io.IoBridge.open(IoBridge.java:441)
        ... 13 more

我有两种必要的权限。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-11 06:56:53

您正在尝试写入应用程序无法访问的内部存储空间。这不是一个根深蒂固的装置。

您需要将文件写入外部存储。

使用getFilesDir() or getExternalFilesDir() (在上下文或活动上)获取目录并将文件写入该位置。

Psuedocode:

代码语言:javascript
复制
File file = new File(context.getFilesDir(), "Test");
FileOutputStream outputStream = new FileOutputStream(file);
outputStream.write("contents".getBytes());
outputStream.close();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53246190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档