2016-12-11 3 views
0

Я пытаюсь найти контакт с контактами плагина cordova, но у меня все еще есть ошибка. Моя кнопка #pickContact правильно открывает активность, в которой я могу использовать контакт. Но когда я использую одно, ничего не происходит. Когда я возвращаюсь к своей странице, у меня появляется сообщение об ошибке OPERATION_CANCELLED_ERROR (код 6).Cordova pickcontact не работает

Я действительно не понимаю, где проблема. Я запускаю свое приложение на 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();
Спасибо за вашу помощь!

ответ

0

В соответствии с эталонным РОУ 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]); 
     } 
    } 
} 

Сообщите мне, если я ошибаюсь или прав.

0

Большое спасибо за ваш ответ. К сожалению, ваш код не работает для меня, но я нашел, что делать:

Когда pickcontact открывает ваши собственные «контакты» приложения, ваше приложение cordova удаляется на фоне. На андроиде это означает, что вы теряете состояние своего приложения, и поэтому у вас есть ошибка. Чтобы решить эту проблему, вам нужно добавить onresume события в файле JS, как это:

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

Итак, как и каждый раз в программировании, когда вы знаете ответ, это легко. Но когда вы не знаете, вы теряете часы и часы ...

Я надеюсь, что это поможет кому-то.

Смежные вопросы