【发布时间】: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 设备。