二八中医
二八中医
  • 发布:2014-11-20 10:59
  • 更新:2017-09-16 12:57
  • 阅读:3149

通讯录联系人为0

分类:HTML5+

以下代码,在ios上可以获取到联系人数据,contacts.length>0,但是在android上,不管类型设置为_BOOK还是_SIM,得到的contacts.length都是0,通讯录获取是成功的,就是在android上联系人一直是0,换了两台不一样的手机,一个htc8088,一个三星note3,都一样是0

plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE,function(addressbook) {
mui.toast('通讯录获取成功!');
// 可通过addressbook进行通讯录操作
addressbook.find(["displayName","phoneNumbers"] , function(contacts) {
alert('1 '+contacts.length);
mui.each(contacts, function(index, contact) {
//通讯录获取成功,联网获取数据
initFriendItem(contact);
//每个联系都分别更新、展示
});
},
function(e) {
mui.alert("Find contact error: " + e.message);
}, {
filter: {},
multiple: true
});

            }, function(e) {  
                mui.alert('通讯录获取失败!\n' + e.message);  
            });
2014-11-20 10:59 3 条评论 负责人:无 分享
已邀请:
Android_磊子

Android_磊子

如果想获取所有联系人 应该是filter: [] 或不写filter属性。

  • 阿洋

    我试了也获取不到,ipad可以,安卓就不行,mx4

    2015-01-14 01:04

  • Android_磊子

    按照我说的那样也不可以吗?

    2015-01-14 14:03

  • 阿洋

    回复 Android_磊子:是的,我都试过了,在红米和mx4上显示都为0,很困惑

    2015-01-14 22:09

Android_磊子

Android_磊子

这应该是个问题,下个版本会更新。

  • 阿洋

    今天感谢你们的同事帮忙看了下问题,同样的apk在你们的测试机上测试没有问题,我后来自己在mx4上试了下还是加载不出联系人,太郁闷了,权限也都是可以访问联系人的,好郁闷

    2015-01-15 23:45

  • 阿洋

    已经解决了,之前addressbook.find(["displayName","phoneNumbers"] ,第一个参数我给了null,但是在ios没这个问题

    2015-01-16 00:08

  • 阿洋

    不过还有个问题想问下,如何能做成可以通过首字母快速导航到所要的联系人吗

    2015-01-16 00:11

  • Android_磊子

    这个需要自己进行排序展示。

    2015-01-16 11:38

hongda

hongda

我的魅族mx2也获取不到通讯信息

  • Android_磊子

    试过其他手机可以吗?当前版本已经修正此问题。

    2015-08-03 14:24

  • hongda

    我就是最新版本的,而且我获取通话记录也获取不到姓名,只有手机号码

    2015-08-03 15:36

G_Pig

G_Pig - 一只特立独行的猪

请问大神,怎么获取啊。。看官方文档都没看懂

二八中医

二八中医 (作者)

参照官方文档即可,取不出号码基本上都是因为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');  
                        });  
开发者007

开发者007

社区无法验证邮箱!没法发帖

该问题目前已经被锁定, 无法添加新回复