【问题标题】:android permissions to write on external storage fail在外部存储上写入的android权限失败
【发布时间】:2016-01-15 11:36:32
【问题描述】:

我无法在 android 中写入外部存储。我确实得到了以下堆栈跟踪: 01-14 10:57:07.108: W/System.err(17380): java.io.FileNotFoundException:

/mnt/media_rw/extSdCard/SterlingPixels.apk: open failed: EACCES (Permission denied)
01-14 10:57:07.108: W/System.err(17380):    at libcore.io.IoBridge.open(IoBridge.java:456)
01-14 10:57:07.108: W/System.err(17380):    at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
01-14 10:57:07.108: W/System.err(17380):    at java.io.FileOutputStream.<init>(FileOutputStream.java:127)
01-14 10:57:07.108: W/System.err(17380):    at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.impl.android.AndroidImplementation.createFileOuputStream(AndroidImplementation.java:4258)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.impl.android.AndroidImplementation.openFileOutputStream(AndroidImplementation.java:4210)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.io.FileSystemStorage.openOutputStream(FileSystemStorage.java:263)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.io.ConnectionRequest.readResponse(ConnectionRequest.java:783)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.io.ConnectionRequest.performOperation(ConnectionRequest.java:440)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.io.NetworkManager$NetworkThread.run(NetworkManager.java:263)
01-14 10:57:07.108: W/System.err(17380):    at com.codename1.impl.CodenameOneThread$1.run(CodenameOneThread.java:60)
01-14 10:57:07.108: W/System.err(17380):    at java.lang.Thread.run(Thread.java:818)
01-14 10:57:07.108: W/System.err(17380): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
01-14 10:57:07.108: W/System.err(17380):    at libcore.io.Posix.open(Native Method)
01-14 10:57:07.108: W/System.err(17380):    at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
01-14 10:57:07.108: W/System.err(17380):    at libcore.io.IoBridge.open(IoBridge.java:442)
01-14 10:57:07.108: W/System.err(17380):    ... 11 more

我不能在构建提示中包含"&lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&gt;",因为这会导致构建在合并清单时失败..所以我假设构建系统正确地创建了这个权限。除非它不起作用。还是我弄错了?

【问题讨论】:

标签: codenameone


【解决方案1】:

我确实连接了 USB,但断开连接后并没有立即解决我的问题。所以,起初我得到了写入文件的路径,如下所示:

 String root = roots[0];
        for (String root1 : roots) {
            if (FileSystemStorage.getInstance().getRootType(root1) == FileSystemStorage.ROOT_TYPE_MAINSTORAGE) {
                root = root1;
                break;
            }
        }
        root= root + FileSystemStorage.getInstance().getFileSystemSeparator();

出于某种奇怪的原因,上面的代码总是返回外部存储;我想它应该返回内部手机存储。所以这总是让我头疼的权限。这是在 Android 5.1.1 上。

我确实把它改成了

String root = FileSystemStorage.getInstance().getAppHomePath();

这当然有效,但这肯定不能解决我的权限问题。

【讨论】:

    【解决方案2】:

    您不需要在 Codename One 中添加 WRITE_EXTERNAL_STORAGE 权限,因为它是默认请求的。较新的版本已迁移到 gradle,这在清单使用方面比 Ant 更严格,因此您会收到错误消息。

    确保您的设备未作为大容量存储设备连接,这有时会导致 sd 卡上的文件访问冲突。

    【讨论】:

      猜你喜欢
      • 2015-10-21
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 2016-09-03
      • 2018-09-22
      相关资源
      最近更新 更多