【问题标题】:Cordova pickcontact doesn't work科尔多瓦pickcontact不起作用
【发布时间】:2017-04-26 13:46:11
【问题描述】:

我尝试使用 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();
谢谢你的帮助 !

【问题讨论】:

    标签: android cordova cordova-plugins contacts


    【解决方案1】:

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

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

    因此,就像每次编程一样,当您知道答案时,这很容易。但是当你不知道时,你会浪费时间和时间......

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

    【讨论】:

      【解决方案2】:

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

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

      让我知道我是对还是错。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-20
        • 2016-08-18
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-14
        相关资源
        最近更新 更多