Phonegap 获取 所有联系人 此版本是cordova 3.4的
调用系统的API 经过修改 迭代出所有联系人 贴上完整代码
文章结尾 提供Demo下载
以下介绍的 phonegap contacts 的 API有
methods
Arguments
Object
从建立项目说起:
<1> 在控制台 创建一个phonegap工程 命令如下
phonegap create my-app
cd my-app
phonegap run android
<2> 我们从命令行进入 到工程目录下的 plugins文件夹
cd my-app
cd plugins
<3> 现在开始下载插件
cordova plugin add org.apache.cordova.contacts
<4> 添加android 平台工程 (ios把 "android" 替换)
cordova platform add android
<5> 编译android工程
cordova build
至此 contacts 插件已经生成并添加到项目当中去...
现在项目应该 有如下文件:
cordova-plugins.js 里面的文件是:
cordova.define('cordova/plugin_list', function(require, exports, module) {
module.exports = [
{
"file": "plugins/org.apache.cordova.contacts/www/contacts.js",
"id": "org.apache.cordova.contacts.contacts",
"clobbers": [
"navigator.contacts"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/Contact.js",
"id": "org.apache.cordova.contacts.Contact",
"clobbers": [
"Contact"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/ContactAddress.js",
"id": "org.apache.cordova.contacts.ContactAddress",
"clobbers": [
"ContactAddress"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/ContactError.js",
"id": "org.apache.cordova.contacts.ContactError",
"clobbers": [
"ContactError"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/ContactField.js",
"id": "org.apache.cordova.contacts.ContactField",
"clobbers": [
"ContactField"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/ContactFindOptions.js",
"id": "org.apache.cordova.contacts.ContactFindOptions",
"clobbers": [
"ContactFindOptions"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/ContactName.js",
"id": "org.apache.cordova.contacts.ContactName",
"clobbers": [
"ContactName"
]
},
{
"file": "plugins/org.apache.cordova.contacts/www/ContactOrganization.js",
"id": "org.apache.cordova.contacts.ContactOrganization",
"clobbers": [
"ContactOrganization"
]
}
];
module.exports.metadata =
// TOP OF METADATA
{
"org.apache.cordova.contacts": "0.2.8"
}
// BOTTOM OF METADATA
});
res/xml 目录下 的config.xml
在config.xml 里面有
<feature name="Contacts">
<param name="android-package" value="org.apache.cordova.contacts.ContactManager" />
</feature>
现在大家只需要将工程导入到eclipse当中 使用官方APi语句在javascript中调用
将下方语句考到 assets目录下 www/index.html 当中 完全复制过去;
example:
<!DOCTYPE html>
<html>
<head>
<title>Contact Example</title>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script type="text/javascript" charset="utf-8">
// Wait for device API libraries to load
document.addEventListener("deviceready", onDeviceReady, false);
// device APIs are available
function onDeviceReady() {
// find all contacts with ' ' in any name field ,field 如果为空 则返回全部的
var options = new ContactFindOptions();
options.filter = "";
options.multiple = true;
/*
查找关键字
名字: "displayName" ,
电话号码:"phoneNumbers" //ContactField[]类型
*/
var fields = ["displayName", "name", "phoneNumbers"];
navigator.contacts.find(fields, onSuccess, onError, options); }
// onSuccess: Get a snapshot of the current contacts
function onSuccess(contacts) {
// 联系人与电话号码 全写在这儿
var aResult = [];
for (var i = 0; contacts[i]; i++) {
console.log("Display Name = " + contacts[i].displayName);
if (contacts[i].phoneNumbers && contacts[i].phoneNumbers.length) {
var contactPhoneList =[];
for (var j = 0; contacts[i].phoneNumbers[j]; j++) {
// alert(contacts[i].phoneNumbers[j].type+" "+contacts[i].displayName+"---------" + contacts[i].phoneNumbers[j].value );
contactPhoneList.push(
{
'type' : contacts[i].phoneNumbers[j].type,
'value' : contacts[i].phoneNumbers[j].value
}
);
};
aResult.push({
name:contacts[i].displayName,
phone:contactPhoneList
});
};
//
}
//迭代获取 联系人和号码
for (var i = 0; aResult[i]; i++) {
for (var j = 0 ; aResult[i].phone[j]; j++) {
alert(aResult[i].name +"--------"+ aResult[i].phone[j].type+"-----"+aResult[i].phone[j].value
);
};
};
}
// onError: Failed to get the contacts
function onError(contactError) { alert('onError!'); }
function baozi(){ alert("S1");}
function intent() { onDeviceReady(); }
</script>
</head>
<body>
<h1>Example</h1>
<p>Find Contacts</p>
<p><a href="#" οnclick="showAlert(); return false;">Show Alert</a></p>
<p><a href="#" οnclick="playBeep(); return false;">Play Beep</a></p>
<p><a href="#" οnclick="baozi(); return false;">Vibrate</a></p>
<p><a href="#" οnclick="intent(); return false;">Html跳转到android界面</a></p>
</body>
</html>
代码详解:
上段代码 中的
var options = new ContactFindOptions();
options.filter = "";
options.multiple = true;
var fields = ["displayName", "phoneNumbers"];
navigator.contacts.find(fields, onSuccess, onError, options); }
options.filter //过滤条件
options.multiple //是否 查询多个
fields //将要查询的 关键字
navigator.contacts.find (fields,onSuccess,onError , options ); // 查找操作
其中的onSuccess 是成功找到联系人后 返回后将执行的回调
查找关键字
名字: "displayName" ,
电话号码:"phoneNumbers" //ContactField[]类型
在注释之前 是js里面获取 所有联系的方式
注释之后是 方便测试的弹出窗口
点击 " Html跳转到android界面 " 就会弹出 alert 如下:
迭代 弹出所有联系人
至此 获取了所有的电话号码
顺道说一句
if (contacts[i].phoneNumbers && contacts[i].phoneNumbers.length) {}
工程下载 将phonegap的platforms导入到eclipse中
如果报错clear一下 查看导的lib包 有没有报错
如果还有错 那么就是您选用了 google的API 改成最新版的android API 就好了
如果导入工程遇到问题 可以查阅我此篇文章
Blog: http://blog.csdn.net/aaawqqq/article/details/20463183
Phonegap解决错误:Error initializing Cordova:Class not found:
http://blog.csdn.net/aaawqqq/article/details/21243869
Demo 下载地址:
http://download.csdn.net/detail/aaawqqq/7053769