From d19e14c0ec22fcf0340e88abc3655eab2c525395 Mon Sep 17 00:00:00 2001 From: "raontie~.1" Date: Sun, 2 Aug 2020 21:48:51 +0800 Subject: [PATCH 1/3] Some magic Android OS has no externalFileDir or it will throw an exception, so use internal storage directly,compatible to use MemoryPersistence --- .../paho/android/service/MqttConnection.java | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java b/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java index 28bf7c10..d9208c3d 100755 --- a/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java +++ b/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java @@ -31,7 +31,7 @@ import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.eclipse.paho.client.mqttv3.MqttException; import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.eclipse.paho.client.mqttv3.MqttPersistenceException; +import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence; import java.io.File; @@ -193,23 +193,30 @@ public void connect(MqttConnectOptions options, String invocationContext, String try { if (persistence == null) { // ask Android where we can put files - File myDir = service.getExternalFilesDir(TAG); - + // some magic Android OS has no externalFileDir or it will throw an exception, so use internal storage directly. + File myDir = null; + try { + myDir = service.getFilesDir(); + } catch (Exception e) { + //skip + } if (myDir == null) { // No external storage, use internal storage instead. - myDir = service.getDir(TAG, Context.MODE_PRIVATE); - - if (myDir == null) { - //Shouldn't happen. - resultBundle.putString(MqttServiceConstants.CALLBACK_ERROR_MESSAGE, "Error! No external and internal storage available"); - resultBundle.putSerializable(MqttServiceConstants.CALLBACK_EXCEPTION, new MqttPersistenceException()); - service.callbackToActivity(clientHandle, Status.ERROR, resultBundle); - return; + try { + myDir = service.getDir(TAG, Context.MODE_PRIVATE); + } catch (Exception e) { + //skip } } - // use that to setup MQTT client persistence storage - persistence = new MqttDefaultFilePersistence(myDir.getAbsolutePath()); + if (myDir == null) { + // compatible very few magic Android OS. + persistence = new MemoryPersistence(); + } else { + // use that to setup MQTT client persistence storage + persistence = new MqttDefaultFilePersistence( + myDir.getAbsolutePath()); + } } IMqttActionListener listener = new MqttConnectionListener(resultBundle) { @@ -671,7 +678,7 @@ public void onSuccess(IMqttToken asyncActionToken) { @Override public void onFailure(IMqttToken asyncActionToken, - Throwable exception) { + Throwable exception) { // No action } }); @@ -762,7 +769,7 @@ public void messageArrived(String topic, MqttMessage message) throws Exception { * @param activityToken */ private void storeSendDetails(final String topic, final MqttMessage msg, final IMqttDeliveryToken messageToken, - final String invocationContext, final String activityToken) { + final String invocationContext, final String activityToken) { savedTopics.put(messageToken, topic); savedSentMessages.put(messageToken, msg); savedActivityTokens.put(messageToken, activityToken); From 10ee0ba7cff43db69d63119f478bb043ded1ae81 Mon Sep 17 00:00:00 2001 From: "raontie~.1" Date: Sun, 2 Aug 2020 22:37:11 +0800 Subject: [PATCH 2/3] Some magic Android OS has no externalFileDir or it will throw an exception, so use internal storage directly,compatible to use MemoryPersistence --- .../paho/android/service/MqttConnection.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java b/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java index d9208c3d..3a17690a 100755 --- a/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java +++ b/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java @@ -195,15 +195,22 @@ public void connect(MqttConnectOptions options, String invocationContext, String // ask Android where we can put files // some magic Android OS has no externalFileDir or it will throw an exception, so use internal storage directly. File myDir = null; + // use internal storage instead. try { - myDir = service.getFilesDir(); + myDir = service.getDir(TAG, Context.MODE_PRIVATE); } catch (Exception e) { //skip } if (myDir == null) { - // No external storage, use internal storage instead. try { - myDir = service.getDir(TAG, Context.MODE_PRIVATE); + myDir = service.getFilesDir(); + if (myDir != null) { + StringBuilder stringBuilder = new StringBuilder(myDir.getAbsolutePath()); + stringBuilder.append(File.separator); + stringBuilder.append(TAG); + myDir = new File(stringBuilder.toString()); + myDir.mkdirs(); + } } catch (Exception e) { //skip } From 0e2aa44f259d130e58f91c8003cb4607e42f1606 Mon Sep 17 00:00:00 2001 From: "raontie~.1" Date: Sun, 16 Aug 2020 16:12:47 +0800 Subject: [PATCH 3/3] fix --- .../java/org/eclipse/paho/android/service/MqttConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java b/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java index 3a17690a..49bb8cbe 100755 --- a/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java +++ b/org.eclipse.paho.android.service/src/main/java/org/eclipse/paho/android/service/MqttConnection.java @@ -212,7 +212,7 @@ public void connect(MqttConnectOptions options, String invocationContext, String myDir.mkdirs(); } } catch (Exception e) { - //skip + myDir = null; } }