参照官方文档即可,取不出号码基本上都是因为filter设置有问题,这一点
我觉得官方文档也没有说清楚
if (v_addressbook != undefined && v_addressbook != null) {
var filtercontent = {
filter: [{
logic: "and",
field: "phoneNumbers",
value: '' + v_range[v_range_point] + "?*"
}],
multiple: true
};
if (mui.os.ios) {
filtercontent = {
multiple: true
};
v_range_point = v_range.length;
}
v_addressbook.find(["displayName", "phoneNumbers"], function(contacts) {
//清空原有朋友圈数据
var current_contact = [];
var current_contact_index = 0;
mui.each(contacts, function(index, contact) {
var displayname = contact.displayName;
if (contact.phoneNumbers == null) {
return;
}
mui.each(contact.phoneNumbers, function(idx_number, number) {
//兼容ios上号码自带的 - 符号或者前置的 +86区号
var cur_msisdn = "" + number.value;
cur_msisdn = cur_msisdn.replace(/-/gi, "").replace('+86', "").replace(/ /g, '').trim();
// 过度过滤,有些号码被过滤掉。
if (!TEL_REG.test(cur_msisdn)) {
//过滤无效手机号码
return;
}
//对于有效号码,记录号码
current_contact[current_contact_index++] = {
msisdn: cur_msisdn,
name: displayname
};
v_total_contact_count++;
});
});
content_sxyw = plus.storage.getItem(option_content_sxyw);
//分次加载这个号段的所有号码
if (current_contact_index <= 0) {
stopqueryui();
return;
}
// alert(JSON.stringify(current_contact));
for (var i = 0; i < current_contact_index; i += 20) {
var tmp_array = [];
if (i + 20 < current_contact_index) {
tmp_array = current_contact.slice(i, i + 20);
} else {
tmp_array = current_contact.slice(i);
}
queryWithTimeInterval(i, optUsername, optOptMsisdn, tmp_array);
}
},
function(e) {
mui.alert("本次联系人加载失败 " +
e.message);
//注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
}, filtercontent);
} else {
var filtercontent = {
filter: [{
logic: "and",
field: "phoneNumbers",
value: '' + v_range[v_range_point] + "?*"
}],
multiple: true
};
if (mui.os.ios) {
filtercontent = {
multiple: true
};
v_range_point = v_range.length;
}
另外还有一种情况,就是通讯录号码太多,这种情况我碰到过,
会导致一个号码都取不出来,后面的解决办法就是分手机的号段查询,
这样就可以把每次取出的号码限定在一定的范围内,也就是代码里的v_range
plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, function(addressbook) {
v_addressbook = addressbook;
v_addressbook.find(["displayName", "phoneNumbers"], function(contacts) {
//清空原有朋友圈数据
var current_contact = [];
var current_contact_index = 0;
mui.each(contacts, function(index, contact) {
var displayname = contact.displayName;
if (contact.phoneNumbers == null) {
return;
}
mui.each(contact.phoneNumbers, function(idx_number, number) {
//兼容ios上号码自带的 - 符号或者前置的 +86区号
var cur_msisdn = "" + number.value;
cur_msisdn = cur_msisdn.replace(/-/gi, "").replace('+86', "").replace(/ /g, '').trim();
// 过度过滤,有些号码被过滤掉。
if (!TEL_REG.test(cur_msisdn)) {
//过滤无效手机号码
return;
}
//对于有效号码,记录号码
current_contact[current_contact_index++] = {
msisdn: cur_msisdn,
name: displayname
};
v_total_contact_count++;
});
});
content_sxyw = plus.storage.getItem(option_content_sxyw);
//分次加载这个号段的所有号码
if (current_contact_index <= 0) {
stopqueryui();
return;
}
for (var i = 0; i < current_contact_index; i += 20) {
var tmp_array = [];
if (i + 20 < current_contact_index) {
tmp_array = current_contact.slice(i, i + 20);
} else {
tmp_array = current_contact.slice(i);
}
queryWithTimeInterval(i, optUsername, optOptMsisdn, tmp_array);
}
},
function(e) {
mui.alert("本次联系人加载失败 " +
e.message);
//注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
}, filtercontent);
},
function(e) {
//注意,加载完新数据后,必须执行如下代码,注意:若为ajax请求,则需将如下代码放置在处理完ajax响应数据之后
stopqueryui(true);
mui.alert('获取通讯录操作对象失败\n');
});
阿洋
我试了也获取不到,ipad可以,安卓就不行,mx4
2015-01-14 01:04
Android_磊子
按照我说的那样也不可以吗?
2015-01-14 14:03
阿洋
回复 Android_磊子:是的,我都试过了,在红米和mx4上显示都为0,很困惑
2015-01-14 22:09