安卓:IOException异常:权限被拒绝(Android: IOException: Permi

2019-09-24 07:57发布

我创建/保存在SD卡上的文件。 这是代码:

File sdDir = Environment.getExternalStorageDirectory();
public void btnsave_clicked(View v) throws FileNotFoundException, IOException{
     File f;
      f=new File(sdDir, "deposit.dma");
      if(!f.exists())
      f.createNewFile();
...
}

但是,当我按一下按钮,它会抛出“拒绝的权限”。 对于添加使用许可权,不要问我。

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

我已经在清单中添加这一点。

我该怎么办? logcat的信息:

10-19 20:25:14.681: E/AndroidRuntime(29016): FATAL EXCEPTION: main
10-19 20:25:14.681: E/AndroidRuntime(29016): java.lang.IllegalStateException: Could not execute method of the activity
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.view.View$1.onClick(View.java:2168)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.view.View.performClick(View.java:2552)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.view.View$PerformClick.run(View.java:9229)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.os.Handler.handleCallback(Handler.java:587)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.os.Handler.dispatchMessage(Handler.java:92)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.os.Looper.loop(Looper.java:130)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.app.ActivityThread.main(ActivityThread.java:3701)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at java.lang.reflect.Method.invokeNative(Native Method)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at java.lang.reflect.Method.invoke(Method.java:507)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at dalvik.system.NativeStart.main(Native Method)
10-19 20:25:14.681: E/AndroidRuntime(29016): Caused by: java.lang.reflect.InvocationTargetException
10-19 20:25:14.681: E/AndroidRuntime(29016):    at java.lang.reflect.Method.invokeNative(Native Method)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at java.lang.reflect.Method.invoke(Method.java:507)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at android.view.View$1.onClick(View.java:2163)
10-19 20:25:14.681: E/AndroidRuntime(29016):    ... 11 more
10-19 20:25:14.681: E/AndroidRuntime(29016): Caused by: java.io.IOException: Permission denied
10-19 20:25:14.681: E/AndroidRuntime(29016):    at java.io.File.createNewFileImpl(Native Method)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at java.io.File.createNewFile(File.java:1257)
10-19 20:25:14.681: E/AndroidRuntime(29016):    at org.brotheroftux.depositmaster.MainActivity.btnsave_clicked(MainActivity.java:43)
10-19 20:25:14.681: E/AndroidRuntime(29016):    ... 14 more

Answer 1:

从Android的环境DOC

应用程序不应该直接使用此顶级目录,以避免污染用户的根命名空间。 这是私人的应用程序的任何文件应该被放置在由Context.getExternalFilesDir返回的目录,该系统将在应用程序卸载删除的照顾。 其他共享文件应放置在由getExternalStoragePublicDirectory(字符串)返回目录之一。

换句话说,这是不是一个真正的好的做法(虽然也许你有一些很好的理由,背景不是很清楚)。

此外,由于邪神和泰德·霍普评论道,确保权限是在清单中的正确位置。



Answer 2:

一些SD卡和MicroSD卡对他们有写保护开关。 如果你有一个,请确保它没有被写保护。

此外,您在将您的手机后,请确保您没有选择“打开USB存储设备”。 这就会安装到SD卡为您的PC访问并禁止写入您的设备。

您可以通过从顶部向下滑动通知栏检查。 雷说:“USB已连接”,这是好的,但“打开USB存储设备”不应该被启用。



文章来源: Android: IOException: Permission denied