Cordova pickcontact不起作用

时间:2016-12-11 16:14:41

标签: android cordova cordova-plugins contacts

我尝试选择与cordova插件联系人的联系人,但我仍然有一个错误。我的按钮#pickContact正确打开了我可以点击联系人的活动。但是当我点击一个时,没有任何反应。当我回到我的页面时,我收到错误消息OPERATION_CANCELLED_ERROR(代码6)。

我真的不明白问题出在哪里。我在Android Marshmallow上运行我的应用程序。我想到了一个权限问题,但我的应用程序可以找到与navigator.contacts.find的正确联系人,但没有找到navigator.contacts.pickContact

这是我的代码:

function pickContact() {
    navigator.contacts.pickContact(function(contact){
        alert('ok !');
    },function(err){
        alert('bug !' + err);
        console.log('Error: ' + err);
    });
}

var app = {
    // Application Constructor
    initialize: function() {
        this.onDeviceReady();
        if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
            document.addEventListener("deviceready", this.onDeviceReady, false);
        } else {
            this.onDeviceReady();
        }
    },

    onDeviceReady: function() {
        $("#pickContact").click(pickContact);
    },

    // Update DOM on a Received Event
    receivedEvent: function(id) {

    }
};

app.initialize();
谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

根据contacts plugin的参考文档,您选择的联系人将设置为JSON.stringify(contact),您可以alert查看选择了哪些联系人(我使用过这个插件但是我没有&#39} ; t需要此功能来选择任何单个联系人,因此不确定是否有任何完成按钮)然后按完成或按钮,这将重定向到您可以获得该联系人或满足您下一个要求的另一个功能。< / p>

function pickContact() {
    navigator.contacts.pickContact(function(contact){
        alert(JSON.stringify(contact));
        //This is added by me, on done button click or single selection
        setContacts(contact);
    },function(err){
        alert('bug !' + err);
        console.log('Error: ' + err);
    });
}
//This is added by me
function setContacts(ct)
{
    alert(JSON.stringify(ct));
    $("#contactlist").append(ct);

    //or

    var getData = JSON.parse(ct);
    if(getData.length > 1)
    {
        for(i=0;i<getData.length;i++)
        {
            $("#contactlist").append(getData[i]);
        }
    }
}

如果我错了或是对的,请告诉我。

答案 1 :(得分:0)

非常感谢您的回答。不幸的是,您的代码对我不起作用,但我发现了该怎么做:

pickcontact 打开您的原生应用“联系人”时,您的cordova应用会在后台删除。在Android上,这意味着你失去了你的应用程序的状态,所以你有一个错误。要解决此问题,您需要在js文件中添加 onresume 事件,如下所示:

var app = {
    // Application Constructor
    initialize: function() {
        this.onDeviceReady();
        if (navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry)/)) {
            document.addEventListener("deviceready", this.onDeviceReady, false);
        } else {
            this.onDeviceReady();
        }
    },

    onDeviceReady: function() {
        $("#pickContact").click(pickContact);
    },

    onResume: function(resumeEvent) {
        //alert('onResume');
    },

    // Update DOM on a Received Event
    receivedEvent: function(id) {

    }
};

app.initialize();

之后,您可以使用以下功能检索您选择的联系人:

function pickContact() {
    navigator.contacts.pickContact(function(contact){
        $("#divTest").append('<p>The following contact has been selected:' + JSON.stringify(contact));
    },function(err){
        alert('bug !' + err);
        console.log('Error: ' + err);
    });
}

所以,就像每次编程一样,当你知道答案时,这很容易。但是当你不知道的时候,你会浪费时间和工作时间......

我希望这会对某人有所帮助。