使用Cordova contacts插件将图像保存到用户的联系人中

Saving image to the user’s contacts with Cordova Contacts plugin

本文关键字:用户 联系人 保存 图像 Cordova contacts 插件 使用      更新时间:2024-03-22

我似乎在使用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(“Contact saved.”);
}

这在iOS上运行得很好,但无论我尝试什么,我都无法在Android上保存图像。data.photo值是一个有效的base64编码字符串,粘贴到URL栏时将显示为图像。有什么建议吗?

这个问题是关于不支持保存类型base64的问题。

您可以发现ContactAccessorSdk5.java中没有base64类型,该位置位于"Platform/android/build/src.org/apache/cordova/contacts/ContactAccessorSbk5.java"中的Project文件夹中

图像数据格式的base64以"data:"开头。因此,您可以在"ContactAccessorSdk5.java"文件中修改getPathFromUri(字符串路径)以保存图像数据base64。

你可以参考https://groups.google.com/forum/#!消息/phonegap/jTMu9Azjaa8/ywQMMEcoS1YJ'

或者我下面的GitHub。

https://github.com/CordovaExam/Contacts

如果你到了那里,你可以得到它,那里有更多的详细信息。

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);
        }
    }