无法在Phonegap / Cordova 3.5.0-0.2.4上运行Contacts插件

时间:2014-07-20 11:17:39

标签: android cordova phonegap-plugins phonegap-build

尝试使用Phonegap / Cordova 3.5.0-0.2.4从Android手机列出联系人,将“联系人”插件安装到应用程序文件夹。

在下面的步骤序列中运行后,我们只显示一个默认的cordova索引页面 设备上显示消息“正在连接设备”

它不显示存储在手机上的联系人。

请帮助我们。谢谢。

Step1
$ cordova create conto com.example.conto

Step2
$ cordova platform add android

Step3
$ cordova plugin add org.apache.cordova.contacts

Step4
$ cordova plugin list (enter)
org.apache.cordova.contacts 0.2.11 "Contacts"

Step5
Added the following in "app/www/js/index.js"

function read_contacts(){
   var options = new ContactFindOptions();
   options.filter="";
   options.filter="";
   options.multiple=true;
   var fields = ["*"];  //"*" will return all contact fields
   navigator.contacts.find(fields, onSuccess, onError, options);
}

// display the address information for all contacts
function onSuccess(contacts) {
  //console.log(JSON.stringify(contacts))
   var li = '';
   $.each(contacts, function(key, value) {
        if(value.name){
            $.each(value.name, function(key, value) {
               if(key == 'formatted'){
                   name = value;
               }                      
            });
        }
        if(value.phoneNumbers){
            $.each(value.phoneNumbers, function(key, value) {
                phone = value.value;
            });
        }                    
        li += '<li style="text-decoration:none;">'+name+' '+phone+'</li>';
   }); 

   $("#contact").html(li);   
}

function onError(contactError) {
   alert('onError!');
}

Step6:
Added the following in "app/www/index.html"



            <ol id="contact"></ol>


Step7
Added the following in app/res/xml/config.xml
<feature name="Contacts">
    <param name="android-package" value="org.apache.cordova.contacts.ContactManager" />
</feature>



 Step8
   Added the following in app/AndroidManifest.xml
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />


    Step9
    $ cordova run android 

2 个答案:

答案 0 :(得分:1)

在Adroid上我成功测试了onSuccess并交换了字段,如下所示:

navigator.contacts.find(onSuccess, onError, fields, options);

这与手册相矛盾但有效。

在&#34;开发者应用程序&#34;它按照手册中的说明工作......

答案 1 :(得分:0)

如果要修改,请尝试了解给定应用程序的结构。 在这种情况下,“空”&#39; cordova项目在index.js中有一个app - Object,它处理事件并隐藏(也给出)Splash-Screen。

您只需删除index.js中的所有代码,但在index.html中保留相应的元素。

这就是你的index.js应该如何工作(基于默认的cordova项目和你的代码,未经测试)

var app = {
    initialize: function() {
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
        app.openContacts();
    },
    receivedEvent: function(id) {
        console.log('Received Event: ' + id);
    },
    openContacts:function(){
        var options = new ContactFindOptions();
        options.filter="";
        options.filter="";
        options.multiple=true;
        var fields = ["*"];  //"*" will return all contact fields
        navigator.contacts.find(fields, app.onSuccess, app.onError, options);
    },
    onSuccess:function(contacts) {
        //console.log(JSON.stringify(contacts))
        var li = '';
        $.each(contacts, function(key, value) {
            if(value.name){
                $.each(value.name, function(key, value) {
                   if(key == 'formatted'){
                       name = value;
                   }                      
                });
            }
            if(value.phoneNumbers){
                $.each(value.phoneNumbers, function(key, value) {
                    phone = value.value;
                });
            }                    
            li += '<li style="text-decoration:none;">'+name+' '+phone+'</li>';
        }); 
        $("#contact").html(li);   
    },
    onError:function(contactError) {
        alert('onError!');
    }
};