Android - 只读文件系统IOException - 不写入root

时间:2017-09-20 12:10:08

标签: java android

我尝试使用MediaRecorder录制音频,并且拒绝让我打开该文件。我没有写到根目录,就像这里的所有其他问题一样。

代码:

baseFilename = getFilesDir().getAbsolutePath() + "/loopRecord"; //returns /data/user/0/com.example.myName.looperpedal/files/loopRecord
//and then later
r.setOutputFile(baseFilename + (++numLoops));

这会导致prepare()失败并显示:

9-20 07:55:49.919 14394-14394/com.example.brydon.looperpedal W/System.err: java.io.FileNotFoundException: null1: open failed: EROFS (Read-only file system)
09-20 07:55:49.920 14394-14394/com.example.brydon.looperpedal W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:455)
09-20 07:55:49.920 14394-14394/com.example.brydon.looperpedal W/System.err:     at java.io.RandomAccessFile.<init>(RandomAccessFile.java:247)
09-20 07:55:49.920 14394-14394/com.example.brydon.looperpedal W/System.err:     at java.io.RandomAccessFile.<init>(RandomAccessFile.java:128)
09-20 07:55:49.920 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.media.MediaRecorder.prepare(MediaRecorder.java:1136)
09-20 07:55:49.920 14394-14394/com.example.brydon.looperpedal W/System.err:     at com.example.brydon.looperpedal.MainActivity.setUpRecorder(MainActivity.java:52)
09-20 07:55:49.920 14394-14394/com.example.brydon.looperpedal W/System.err:     at com.example.brydon.looperpedal.MainActivity.onCreate(MainActivity.java:38)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.Activity.performCreate(Activity.java:6912)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2900)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3008)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.ActivityThread.-wrap14(ActivityThread.java)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.os.Looper.loop(Looper.java:154)
09-20 07:55:49.921 14394-14394/com.example.brydon.looperpedal W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:6688)
09-20 07:55:49.922 14394-14394/com.example.brydon.looperpedal W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
09-20 07:55:49.922 14394-14394/com.example.brydon.looperpedal W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
09-20 07:55:49.922 14394-14394/com.example.brydon.looperpedal W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
09-20 07:55:49.922 14394-14394/com.example.brydon.looperpedal W/System.err: Caused by: android.system.ErrnoException: open failed: EROFS (Read-only file system)
09-20 07:55:49.922 14394-14394/com.example.brydon.looperpedal W/System.err:     at libcore.io.Posix.open(Native Method)
09-20 07:55:49.922 14394-14394/com.example.brydon.looperpedal W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:187)
09-20 07:55:49.923 14394-14394/com.example.brydon.looperpedal W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:441)
09-20 07:55:49.923 14394-14394/com.example.brydon.looperpedal W/System.err:     ... 17 more

在我的清单文件中,我确实有:

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

虽然我没有使用外部存储,但是是否有内部存储权限?

使用我所拥有的解决方案似乎解决了所有其他问题,因此我不知道自己错过了什么。

2 个答案:

答案 0 :(得分:0)

我应该看到堆栈跟踪 - 它试图写入的文件称为null1

原来我在构建文件名之前尝试创建mediarecorder。

答案 1 :(得分:0)

getFilesDir()。getAbsolutePath()路径仅使用您的应用程序或此数据不共享您的应用程序可见此数据。

相关问题