【问题标题】: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]);
}
}
}
让我知道我是对还是错。