Javascript 将图像保存到用户&x2019;s带有Cordova联系人插件的联系人
使用Android上的Cordova contacts插件,我似乎无法将图像保存到用户的联系人。这是我的密码:Javascript 将图像保存到用户&x2019;s带有Cordova联系人插件的联系人,javascript,android,cordova,contacts,Javascript,Android,Cordova,Contacts,使用Android上的Cordova contacts插件,我似乎无法将图像保存到用户的联系人。这是我的密码: var contact = navigator.contacts.create(); // data.photo is a valid base64-encoded string. contact.photos[0] = { "type": "base64", "value": data.photo }; contact.save(function() { alert(
var contact = navigator.contacts.create();
// data.photo is a valid base64-encoded string.
contact.photos[0] = {
"type": "base64",
"value": data.photo
};
contact.save(function() {
alert(“Contact saved.”);
}
这在iOS上非常有效,但无论我怎么做,我都无法在Android上保存图像。
data.photo
值是一个有效的base64编码字符串,粘贴到URL栏时将显示为图像。有什么建议吗?此问题与不支持保存base64类型有关
您可以发现ContactAccessorSdk5.java中没有base64类型,它位于“Platform/android/build/src/org/apache/cordova/contacts/ContactAccessorSdk5.java”的项目文件夹中
图像数据格式的base64以“data:”开头。因此,您可以修改“ContactAccessorSdk5.java”文件中的getPathFromUri(字符串路径),以保存图像数据base64
你可以在“”中引用
或者我下面的GitHub
你可以得到它,如果你到那里,有更多的详细信息
private InputStream getPathFromUri(String path) throws IOException {
if (path.startsWith("data:")) { // data:image/png;base64,[ENCODED_IMAGE]
String dataInfos = path.substring(0, path.indexOf(',')); // data:image/png;base64
dataInfos = dataInfos.substring(dataInfos.indexOf(':') + 1); // image/png;base64
String baseEncoding = dataInfos.substring(dataInfos.indexOf(';') + 1); // base64
if("base64".equalsIgnoreCase(baseEncoding)) {
String img = path.substring(path.indexOf(',') + 1); // [ENCODED_IMAGE]
byte[] encodedData = img.getBytes();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(encodedData, 0, encodedData.length);
Base64InputStream base64InputStream = new Base64InputStream(byteArrayInputStream, Base64.DEFAULT);
return base64InputStream;
} else {
Log.w(LOG_TAG, "Could not decode image. The found base encoding is " + baseEncoding);
}
}
if (path.startsWith("content:")) {
Uri uri = Uri.parse(path);
return mApp.getActivity().getContentResolver().openInputStream(uri);
}
if (path.startsWith("http:") || path.startsWith("https:") || path.startsWith("file:")) {
URL url = new URL(path);
return url.openStream();
}
else {
return new FileInputStream(path);
}
}