Android中的文件写入权限错误
我正在向SDCard写入文件,并将其设置为<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
它可以正常工作到3.x,但在4.0上它提供了以下错误。Android中的文件写入权限错误
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)
任何帮助或建议?
罗希特
后来我发现问题是设备特定的。我从Android市场安装了文件管理器应用程序,并且没有显示写入权限。这意味着该制造商的Android操作系统实施不提供导致该问题的写入许可。
也许你已硬编码的外部存储目录,它适用于特定设备。
Environment.getExternalStorageDirectory();
发布你的代码将有助于不仅仅是日志等等。
感谢发布回复亲爱的,但我这样做'Environment.getExternalStorageDirectory()。canWrite()'并得到错误:(悲伤 – 2012-07-19 10:25:27
你的代码工作以外的AsyncTask? – mihail 2012-07-19 10:36:24
没有尝试过..是否重要? – 2012-07-19 11:03:41
只是猜测,但你可能有你的手机仍然连接到电脑?如果您的SD卡仍被锁定为USB设备,则可能会发生此错误。 希望这可以帮助, 托比亚斯
感谢您的答复,没有它不是这样的。后来我发现问题出在设备上。 – 2012-11-26 23:19:29
我有同样的问题,你给了我答案。感谢那! – Chris 2013-02-14 13:54:31
当然,欢迎您(如同其他选项一样):-) – 2013-02-15 15:46:57
你可能会检查你刚刚更新了你的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识别的文件系统。我解决了这个格式化SD卡存储。格式并不意味着删除您的个人信息,如地址,备忘录或历史记录。格式化后,它就像魔术一样。
这可能对你有帮助。
在sdcard上写入文件时,我遇到了同样的问题。我已经设置写入文件所需的所有权限,但我使用的文件象下面这样的对象:
错误: myfile文件=新的文件(Environment.getExternalStorageDirectory()getAbsoluteFile()+文件名);
正确: myfile文件=新的文件(Environment.getExternalStorageDirectory()getAbsoluteFile(),文件名。);
这意味着路径是错误的。
您正在使用模拟器或设备进行检查吗? – Ponmalar 2012-08-07 12:35:06