3

我正在向 SDCard 写入一个文件并将其设置<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />为在 3.x 之前运行良好,但在 4.0 上它给出了以下错误。

java.io.IOException: open failed: EACCES (Permission denied)
at java.io.File.createNewFile(File.java:940)
at com.gt.mLearning.app.VideoViewActivity.copyFile(VideoViewActivity.java:204)
at com.gt.mLearning.app.VideoViewActivity.access$3(VideoViewActivity.java:193)
at com.gt.mLearning.app.VideoViewActivity$Loader.doInBackground(VideoViewActivity.java:61)
at com.gt.mLearning.app.VideoViewActivity$Loader.doInBackground(VideoViewActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:264)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:137)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
at java.lang.Thread.run(Thread.java:856)
Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at java.io.File.createNewFile(File.java:933)

有什么帮助或建议吗?

罗希特

4

5 回答 5

5

只是猜测,但您的手机是否仍连接到计算机?如果您的 sd 卡仍被锁定为 USB 设备,则可能会发生此错误。希望这有帮助,托拜厄斯

于 2012-11-26T16:51:09.397 回答
1

后来我发现问题是特定于设备的。我从 Android 市场安装了文件管理器应用程序,它显示没有写入权限。这意味着该制造商的 Android 操作系统实现不提供导致问题的写入权限。

于 2012-11-26T23:22:11.503 回答
0

可能您已经对外部存储目录进行了硬编码,并且它可以在特定设备上运行。

Environment.getExternalStorageDirectory();

发布您的代码将比日志提供更多帮助。

于 2012-07-19T10:08:26.947 回答
0

您也可以检查一下您是否刚刚更新了您的 Android 操作系统。一些重大变化导致 SD 卡问题。对我来说,我使用三星固件更新应用程序 Odin 将 SHV-E160K 中的 Android O/S 从 2.3.5 更新到 4.1.2。我遇到了问题。我的详细错误信息如下:

02-14 11:00:43.057  22288-22288/? W/System.err﹕ java.io.IOException: open failed: EACCES (Permission denied)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at java.io.File.createNewFile(File.java:940)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at com.sec.android.util.IAPDeviceInfoEditor.activity.EditorActivity.createDeviceInfo(EditorActivity.java:222)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at com.sec.android.util.IAPDeviceInfoEditor.activity.EditorActivity.onClick(EditorActivity.java:121)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at android.view.View$1.onClick(View.java:3685)
02-14 11:00:43.057  22288-22288/? W/System.err﹕ at android.view.View.performClick(View.java:4192)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.view.View$PerformClick.run(View.java:17248)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.os.Handler.handleCallback(Handler.java:615)
02-14 11:00:43.067      172-485/? V/AudioHardwareMSM8660﹕ open driver
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:92)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.os.Looper.loop(Looper.java:137)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:4950)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:511)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:997)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at dalvik.system.NativeStart.main(Native Method)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at libcore.io.Posix.open(Native Method)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ at java.io.File.createNewFile(File.java:933)
02-14 11:00:43.067  22288-22288/? W/System.err﹕ ... 16 more

原因是 4.1.2 无法识别 2.3.5 中的文件系统。我解决了这个格式化 sdcard 存储。格式并不意味着删除您的个人信息,例如地址、备忘录或历史记录。格式化后,它就像魔术一样工作。

于 2014-02-14T02:16:59.560 回答
0

这可能会对您有所帮助。

在 sdcard 上写入文件时,我遇到了同样的问题。我已经设置了写入文件所需的所有权限,但我使用了如下文件对象:

错误:文件 myFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile()+fileName);

正确: File myFile = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(), fileName);

这意味着路径是错误的。

于 2014-07-03T02:46:22.067 回答