uni-app调用移动端通讯录.js

437 阅读2分钟
/**

* nativeCommon,通过Native.js调用原生API

*/

var nativeCommon = {

/**

* 通讯录模块

*/

contacts: {

getContact: function(callBack) {

switch (plus.os.name) {

case "iOS":

if (plus.device.model === "iPhoneSimulator") {

//模拟器

nativeCommon.contacts.ios.visitContacts(function(name, phoneNumber) {

callBack(name, phoneNumber);

});

} else {

//真机

nativeCommon.contacts.ios.visitAddressBook(function(name, phoneNumber) {

callBack(name, phoneNumber);

});

}

break;

case "Android":

nativeCommon.contacts.android.visitContacts(function(name, phoneNumber) {

callBack(name, phoneNumber);

});

break;

default:

break;

}

},

ios: { //供iOS系统调用

/**

* 访问通讯录,将获取的联系人信息通过callBack返回

* 仅限模拟器使用(Native.js 的bug)

* @param {Object} callBack回调

*/

visitContacts: function(callBack) {

var contactPickerVC = plus.ios.newObject("CNContactPickerViewController");

//实现代理方法【- (void)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact;】

//同时生成遵守CNContactPickerDelegate协议的代理对象delegate

var delegate = plus.ios.implements("CNContactPickerDelegate", {

"contactPicker:didSelectContact:": function(picker, contact) {

//姓名

var name = "";

//姓氏

var familyName = contact.plusGetAttribute("familyName");

//名字

var givenName = contact.plusGetAttribute("givenName");

name = familyName + givenName;

//电话号码

var phoneNo = "";

var phoneNumbers = contact.plusGetAttribute("phoneNumbers");

if (phoneNumbers.plusGetAttribute("count") > 0) {

var phone = phoneNumbers.plusGetAttribute("firstObject");

var phoneNumber = phone.plusGetAttribute("value");

phoneNo = phoneNumber.plusGetAttribute("stringValue");

}

if (callBack) {

callBack(name, phoneNo);

}

}

});

//给通讯录控制器contactPickerVC设置代理

plus.ios.invoke(contactPickerVC, "setDelegate:", delegate);

//获取当前UIWebView视图

var currentWebview = plus.ios.currentWebview();

//根据当前UIWebView视图获取当前控制器

var currentVC = nativeCommon.contacts.ios.getViewControllerByView(currentWebview);

//由当前控制器present到通讯录控制器

plus.ios.invoke(currentVC, "presentViewController:animated:completion:", contactPickerVC, true, null);

},

/**

* 访问通讯录,将获取的联系人信息通过callBack返回

* 仅限真机使用(Native.js 的bug)

* @param {Object} callBack

*/

visitAddressBook: function(callBack) {

var peoplePickerNavController = plus.ios.newObject("ABPeoplePickerNavigationController");

console.log(2);

//实现代理方法【- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker didSelectPerson:(ABRecordRef)person;】

//同时生成遵守ABPeoplePickerNavigationControllerDelegate协议的代理对象peoplePickerDelegate

var peoplePickerDelegate = plus.ios.implements("ABPeoplePickerNavigationControllerDelegate", {

"peoplePickerNavigationController:didSelectPerson:": function(peoplePicker, person) {

//这里的peoplePicker竟然是CNContact实例对象,person是undefined

console.log(JSON.stringify(peoplePicker));

console.log(JSON.stringify(person));

console.log(typeof person);

//所以之前的代码不用改

var contact = peoplePicker;

//姓名

var name = "";

//姓氏

var familyName = contact.plusGetAttribute("familyName");

//名字

var givenName = contact.plusGetAttribute("givenName");

name = familyName + givenName;

//电话号码

var phoneNo = "";

var phoneNumbers = contact.plusGetAttribute("phoneNumbers");

if (phoneNumbers.plusGetAttribute("count") > 0) {

var phone = phoneNumbers.plusGetAttribute("firstObject");

var phoneNumber = phone.plusGetAttribute("value");

phoneNo = phoneNumber.plusGetAttribute("stringValue");

}

if (callBack) {

callBack(name, phoneNo);

}

}

});

//给通讯录控制器peoplePickerNavController设置代理

plus.ios.invoke(peoplePickerNavController, "setPeoplePickerDelegate:", peoplePickerDelegate);

//获取当前UIWebView视图

var UIApplicationClass = plus.ios.importClass("UIApplication");

var UIAppObj = UIApplicationClass.sharedApplication();

var del = plus.ios.invoke(UIAppObj, "delegate");

var appWindowObj = plus.ios.invoke(del, "window");

var appRootController = plus.ios.invoke(appWindowObj, "rootViewController");

//由当前控制器present到通讯录控制器

plus.ios.invoke(appRootController, "presentViewController:animated:completion:", peoplePickerNavController, true,

null);

}

},

android: { //供android系统调用

visitContacts: function(callBack) {

console.log(1);

plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE,(book)=>{

var REQUESTCODE = 1000;

var main = plus.android.runtimeMainActivity();

var Intent = plus.android.importClass('android.content.Intent');

var ContactsContract = plus.android.importClass('android.provider.ContactsContract');

var intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);

main.onActivityResult = function(requestCode, resultCode, data) {

if (REQUESTCODE == requestCode) {

var phoneNumber = "";

var resultString = "";

var context = main;

plus.android.importClass(data);

var contactData = data.getData();

var resolver = context.getContentResolver();

plus.android.importClass(resolver);

var cursor = resolver.query(contactData, null, null, null, null);

plus.android.importClass(cursor);

cursor.moveToFirst();

//姓名

var givenName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) || "";

var contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

var pCursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds

.Phone.CONTACT_ID + " = " + contactId, null, null);

if (pCursor.moveToNext()) {

phoneNumber = pCursor.getString(pCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}

if (callBack) {

callBack(givenName, phoneNumber);

}

cursor.close();

pCursor.close();

}

};

main.startActivityForResult(intent, REQUESTCODE);

})

}

}

}

}

module.exports = {

nativeCommon: nativeCommon

}

调用:

import {nativeCommon} from '路径' //获取手机通讯录

let that = this

// #ifdef APP-PLUS

nativeCommon.contacts.getContact(function callBack(name, phoneNumber){  

that.name = name;

that.mobile = phoneNumber.replace(/\s|-+/g,"");

});

// #endif