diff --git a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java index 829f322e..ea684a42 100755 --- a/framework/src/org/apache/cordova/NativeToJsMessageQueue.java +++ b/framework/src/org/apache/cordova/NativeToJsMessageQueue.java @@ -409,6 +409,9 @@ public class NativeToJsMessageQueue { case PluginResult.MESSAGE_TYPE_STRING: // s ret += 1 + pluginResult.getStrMessage().length(); break; + case PluginResult.MESSAGE_TYPE_BINARYSTRING: + ret += 1 + pluginResult.getMessage().length(); + break; case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: ret += 1 + pluginResult.getMessage().length(); break; @@ -451,7 +454,11 @@ public class NativeToJsMessageQueue { sb.append('s'); sb.append(pluginResult.getStrMessage()); break; - case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: + case PluginResult.MESSAGE_TYPE_BINARYSTRING: // S + sb.append('S'); + sb.append(pluginResult.getMessage()); + break; + case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: // A sb.append('A'); sb.append(pluginResult.getMessage()); break; diff --git a/framework/src/org/apache/cordova/api/PluginResult.java b/framework/src/org/apache/cordova/api/PluginResult.java index 4c1d8333..a642200a 100755 --- a/framework/src/org/apache/cordova/api/PluginResult.java +++ b/framework/src/org/apache/cordova/api/PluginResult.java @@ -71,11 +71,15 @@ public class PluginResult { } public PluginResult(Status status, byte[] data) { - this.status = status.ordinal(); - this.messageType = MESSAGE_TYPE_ARRAYBUFFER; - this.encodedMessage = Base64.encodeToString(data, Base64.NO_WRAP); + this(status, data, false); } + public PluginResult(Status status, byte[] data, boolean binaryString) { + this.status = status.ordinal(); + this.messageType = binaryString ? MESSAGE_TYPE_BINARYSTRING : MESSAGE_TYPE_ARRAYBUFFER; + this.encodedMessage = Base64.encodeToString(data, Base64.NO_WRAP); + } + public void setKeepCallback(boolean b) { this.keepCallback = b; } @@ -143,6 +147,9 @@ public class PluginResult { public static final int MESSAGE_TYPE_BOOLEAN = 4; public static final int MESSAGE_TYPE_NULL = 5; public static final int MESSAGE_TYPE_ARRAYBUFFER = 6; + // Use BINARYSTRING when your string may contain null characters. + // This is required to work around a bug in the platform :(. + public static final int MESSAGE_TYPE_BINARYSTRING = 7; public static String[] StatusMessages = new String[] { "No result",