无法使用phonegap应用程序访问联系人

时间:2012-10-17 08:22:18

标签: javascript android html5 cordova

我在电话间隙网站上的文档后写了一段代码     

// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
//
function onDeviceReady() {
    // find all contacts
    var options = new ContactFindOptions();

    var fields = ["displayName", "name"];
    navigator.contacts.find(fields, onSuccess, onError, options);
}

// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {
    for (var i=0; i<contacts.length; i++) 
    {
        console.log("Display Name = " + contacts[i].displayName);
      var element = document.getElementById('cont');

      element.innerHTML='<li><a href="#">' + contacts[i].displayName + '</a></li>';

    }
}

// onError: Failed to get the contacts
//
function onError(contactError) {
    alert('onError!');
}

</script>`

它在andriod模拟器中工作正常但是当我安装应用程序三星galaxy手机时它返回“null”。请帮助。

3 个答案:

答案 0 :(得分:2)

奇怪......我也得到null ...(使用Phonegap 2.0版)

我建议您使用contacts[i].name.formatted而不是contacts[i].displayName

因此,例如,使用contacts[i].name.formatted,您的代码应如下所示:

// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
//
function onDeviceReady() {
    // find all contacts
    var options = new ContactFindOptions();

    var fields = ["displayName", "name"];
    navigator.contacts.find(fields, onSuccess, onError, options);
}

// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {

    var element = document.getElementById('cont'); 
    for (var i=0; i<contacts.length; i++) 
    {
        console.log("Display Name = " + contacts[i].name.formatted);                
        element.innerHTML='<li><a href="#">' + contacts[i].name.formatted + '</a></li>';    
    }
}

// onError: Failed to get the contacts
//
function onError(contactError) {
    alert('onError!');
}


以下是您可以使用contacts[i].name获得的不同信息:

  • contacts[i].name.givenName:提供给定名称

  • contacts[i].name.formatted:提供格式化名称(名字+姓氏)

  • contacts[i].name.middleName:提供中间名称

  • contacts[i].name.familyName:提供系列名称(名字+姓氏)

  • contacts[i].name.honorificPrefix:提供敬语前缀

  • contacts[i].name.honorificSuffix:提供敬语后缀

希望这有帮助。

答案 1 :(得分:1)

这是一个简单解决方案的复杂问题。只添加了一行代码

 options.filter=""; 
    options.multiple=true;
    var filter = ["*"];

这是完整的代码

 <script type="text/javascript" charset="utf-8">

// Wait for Cordova to load
//
document.addEventListener("deviceready", onDeviceReady, false);

// Cordova is ready
//
function onDeviceReady() {
   // find all contacts
    var options = new ContactFindOptions();
    options.filter=""; 
    options.multiple=true;
    var filter = ["*"];
    navigator.contacts.find(filter, onSuccess, onError, options);


}

// onSuccess: Get a snapshot of the current contacts
//
function onSuccess(contacts) {
    var ele = document.getElementById("cont");
    var str = '<ul data-role="listview" >';
  for (var i=0; i<contacts.length; i++) {


       str=str + '<li>' + contacts[i].displayName + '</li>';
   }
   str = str + '</ul>';

  // ele.innerHTML = str;
}

// onError: Failed to get the contacts
//
function onError(contactError) {
    alert('onError!');
}

它正在工作,顺便说一下它根据联系人条目也会显示一些空值但工作正常。

答案 2 :(得分:0)

可能是iOS - http://docs.phonegap.com/en/2.1.0/cordova_contacts_contacts.md.html#Contacts。文档说那里不支持displayName。我会遵循Littm的建议,并检查我在这里链接的文档,因为它讨论了哪些属性在不同平台上不起作用。