Cordova-plugin-contacts将navigator.contacts保留为undefined?

时间:2016-08-16 15:35:04

标签: javascript angularjs cordova ionic-framework cordova-plugins

为了介绍我目前的项目 - 我正在为员工开设一个电话簿应用程序,其中有一个按钮可以在用户的​​设备上创建新的联系人。我正在使用以下插件在我的Ionic应用程序中处理它:

http://cordova.apache.org/docs/en/latest/reference/cordova-plugin-contacts/

尝试按照文档说明的方式访问插件时:

navigator.contacts

我还试图通过

访问
window.navigator.contacts

它返回一个未定义的错误。在文档中,它声明只有在触发deviceready事件后才能访问它 - 所以我的代码如下:

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log("Testing Navigation Contacts");
    console.log(navigator.contacts);
}

我还尝试使用$ ionicPlatform.ready功能,如下所示:

$ionicPlatform.ready(function() {
    var myContact = window.navigator.contacts.create({"displayName": "Test User"});
    myContact.save();
});

下面列出了确切的错误消息:

Error: undefined is not an object (evaluating 'navigator.contacts.create')

任何帮助都会非常感激,伙计们。我不知道还有什么可尝试的。谢谢你的阅读!

麦克

2 个答案:

答案 0 :(得分:0)

我已经尝试了插件,它按预期工作。在Android Marshamallow上运行的设备中进行了相同的测试。

提出了一个示例cordova应用程序,该应用程序使用此联系人插件向设备添加联系人。您可以在我的github page

中查看示例

由于您在使用插件时遇到了困难,我还在示例中添加了插件文件夹。你可以复制项目,添加android平台,构建和测试相同。希望它有所帮助

答案 1 :(得分:0)

使用此插件时遇到了同样的问题。我认为这是版本问题,但文档尚未更新。

这就是我的进展:

  • 首先在app.module.ts文件中导入联系人

    import { Contacts } from '@ionic-native/contacts'; ... ... providers: [ ... Contacts, ... ]

  • 然后导入您要在文件中使用的类

    import { Contacts, Contact , ContactField, ContactName } from '@ionic-native/contacts'; ... constructor(private contacts: Contacts) {}

  • 现在您可以使用对象

    createContact(name, number){ let contact: Contact = this.contacts.create(); contact.name = new ContactName(null, '', name); contact.phoneNumbers = [new ContactField('mobile', number,true),new ContactField('home', number+1,true)]; contact.save().then( () => alert('Contact saved!'+ JSON.stringify(contact)), (error: any) => alert('Error saving contact.'+error) ); }

    在这里,我创建了一个包含2个电话号码的联系人。当然你可以使用其他函数find()和pickContact()。