【问题标题】:Android File Write Permission Denied Error even after granting the permission即使授予权限后,Android文件写入权限被拒绝错误
【发布时间】:2020-11-04 05:22:08
【问题描述】:

我在我的应用程序 (MQTT Broker) 中使用 Eclipse Moquette 来连接 IoT 设备。我已经在清单中声明了读/写存储的所有权限,这里是我的清单文件中声明的权限。

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

所有权限都是在运行时提示和授予的。成功地。 App UI 建立在 React-native 之上,而 MQTT Broker 从 java 模块作为服务启动。

不过,我在启动服务器时收到此错误。

MQTT 服务器尝试启动服务时的 logcat 屏幕截图。所有权限都是在运行时授予的。

2020-11-04 14:58:37.515 21844-21952/com.botapp E/Moquette: null
    java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
        at java.io.File.createNewFile(File.java:1008)
        at org.eclipse.moquette.spi.persistence.MapDBPersistentStore.initStore(MapDBPersistentStore.java:69)
        at org.eclipse.moquette.spi.impl.SimpleMessaging.processInit(SimpleMessaging.java:166)
        at org.eclipse.moquette.spi.impl.SimpleMessaging.init(SimpleMessaging.java:95)
        at org.eclipse.moquette.server.Server.startServer(Server.java:90)
        at org.eclipse.moquette.server.Server.startServer(Server.java:76)
        at com.botapp.mqtt.StartServer.serverStart(StartServer.java:31)
        at com.botapp.mqtt.StartServer.run(StartServer.java:24)
        at java.lang.Thread.run(Thread.java:919)
2020-11-04 14:58:37.515 21844-21952/com.botapp W/System.err: org.eclipse.moquette.proto.MQTTException: Can't create temp file for subscriptions storage [/storage/emulated/0/moquette_store.mapdb]
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at org.eclipse.moquette.spi.persistence.MapDBPersistentStore.initStore(MapDBPersistentStore.java:72)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at org.eclipse.moquette.spi.impl.SimpleMessaging.processInit(SimpleMessaging.java:166)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at org.eclipse.moquette.spi.impl.SimpleMessaging.init(SimpleMessaging.java:95)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at org.eclipse.moquette.server.Server.startServer(Server.java:90)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at org.eclipse.moquette.server.Server.startServer(Server.java:76)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at com.botapp.mqtt.StartServer.serverStart(StartServer.java:31)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at com.botapp.mqtt.StartServer.run(StartServer.java:24)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at java.lang.Thread.run(Thread.java:919)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err: Caused by: java.io.IOException: Permission denied
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at java.io.UnixFileSystem.createFileExclusively0(Native Method)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at java.io.File.createNewFile(File.java:1008)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     at org.eclipse.moquette.spi.persistence.MapDBPersistentStore.initStore(MapDBPersistentStore.java:69)
2020-11-04 14:58:37.516 21844-21952/com.botapp W/System.err:     ... 7 more

【问题讨论】:

  • 如果您的设备高于 android marshmallow,您还需要声明运行时权限和清单权限
  • 已经完成...存储权限在运行时检查并提示。当我检查应用程序设置>权限(对于这个应用程序)时,它显示我已授予。
  • 请不要发布错误消息文本的图像。对于使用屏幕阅读器的人来说,这真的很难阅读而且不可能。发布实际文本并使用工具栏对其进行格式化。
  • org.eclipse.moquette.proto.MQTTException: Can't create temp file for subscriptions storage [/storage/emulated/0/moquette_store.mapdb] 所以你不能在外部存储上创建文件。就是这样。
  • 您使用的是 Android 10 设备。

标签: java android


【解决方案1】:

我知道这个问题已经发布了很长时间。但是,我在这里没有看到解决方案,所以我决定合作,因为其他开发人员可能有同样的问题。

我遇到了同样的问题。我在清单中添加代码解决了这个错误: android:requestLegacyExternalStorage="true"

此问题似乎出现在最新版本的 Android 中。其实这不是问题,我们应该只实现权限需求。 希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2021-10-31
    • 2022-01-01
    • 2014-10-30
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多