Android 的 Native.js 获取 通信录 联系人信息
Android 获得用户通信录联系人,通过 Native.js 调用打开手机自带的联系人页面,选择联系人,并返回数据。
1.打开安卓系统通信录
var main = plus.android.runtimeMainActivity(); //获行当前的页面对象,activity 相当于一个页面
var Intent = plus.android.importClass('android.content.Intent');
var contract=plus.android.importClass('android.provider.ContactsContract');
var intent = new Intent(Intent.ACTION_PICK,contract.Contacts.CONTENT_URI);
main.onActivityResult=function(requestCode,resultCode, data)
{
console.log("dd:"+resultCode);
if(requestCode==0 && resultCode==-1) //返回代号0 ,resultCode=-1,代表用户点击了选择联系人
{
var userPhone=getContactPhone(main,contract,data);// 返回联系人姓名和手机号码
document.querySelector(".userphone").innerHTML='<p>联系人:'+userPhone.name+'</p> <p>手机号:'+userPhone.phone+' </p>';
}
}
main.startActivityForResult(intent,0); //打开通信录
2.用户选择联系人时,返回联系人姓名和手机号码
//返回一个JSON,包含联系人姓名,和手机号码
function getContactPhone(main,contract,data)
{
var contact_data={};
plus.android.importClass(data); //把data转化java对象
var contactData=data.getData(); //处理返回的data ,
var resolver=main.getContentResolver();
plus.android.importClass(resolver); //把resolver转化java对象
var cursor=resolver.query(contactData,null,null,null,null);
plus.android.importClass(cursor); //把resolver转化java对象
if(cursor!=null)
{
cursor.moveToFirst(); //开始往下读取
//读取当前索引的联系人姓名
var nameIndex=cursor.getColumnIndex(contract.Contacts.DISPLAY_NAME);
contact_data.name=cursor.getString(nameIndex);
//取得电话号码,因为手机号码和联系人存在不同的地方
var ContactId=cursor.getString(cursor.getColumnIndex(contract.Contacts._ID));
var phone =resolver.query(contract.CommonDataKinds.Phone.CONTENT_URI, null,contract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
if(phone != null)
{
phone.moveToFirst();
contact_data.phone=phone.getString(phone.getColumnIndex(contract.CommonDataKinds.Phone.NUMBER));
}
cursor.close();
phone.close();
}
return contact_data;
}
示例, 复制可以直接使用
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<link href="css/mui.min.css" rel="stylesheet" />
<style>
.userphone p{ font-size:16px; color: red;}
</style>
</head>
<body>
<center style="margin-top: 145px;">
<input type="button" value="打开通信录,选择联系人" id="select" />
<br /> <br />
<div class="userphone">
</div>
</center>
<script src="js/mui.min.js"></script>
<script type="text/javascript">
mui.init();
mui.plusReady(function()
{
mui("body").on("tap","#select",function()
{
var main = plus.android.runtimeMainActivity(); //获行当前的页面对象,activity 相当于一个页面
var Intent = plus.android.importClass('android.content.Intent');
var contract=plus.android.importClass('android.provider.ContactsContract');
var intent = new Intent(Intent.ACTION_PICK,contract.Contacts.CONTENT_URI);
//监听通信录返回时,获得数据
main.onActivityResult=function(requestCode,resultCode, data)
{
console.log("dd:"+resultCode);
if(requestCode==0 && resultCode==-1) //返回代号0 ,resultCode=-1,代表用户点击了选择联系人
{
var userPhone=getContactPhone(main,contract,data);
document.querySelector(".userphone").innerHTML='<p>联系人:'+userPhone.name+'</p> <p>手机号:'+userPhone.phone+' </p>';
}
}
main.startActivityForResult(intent,0); //打开通信录
});
});
//返回一个JSON,包含联系人姓名,和手机号码
function getContactPhone(main,contract,data)
{
var contact_data={};
plus.android.importClass(data); //把data转化java对象
var contactData=data.getData(); //处理返回的data ,
var resolver=main.getContentResolver();
plus.android.importClass(resolver); //把resolver转化java对象
var cursor=resolver.query(contactData,null,null,null,null);
plus.android.importClass(cursor); //把resolver转化java对象
if(cursor!=null)
{
cursor.moveToFirst(); //开始往下读取
//读取当前索引的联系人姓名
var nameIndex=cursor.getColumnIndex(contract.Contacts.DISPLAY_NAME);
contact_data.name=cursor.getString(nameIndex);
//取得电话号码,因为手机号码和联系人存在不同的地方
var ContactId=cursor.getString(cursor.getColumnIndex(contract.Contacts._ID));
var phone =resolver.query(contract.CommonDataKinds.Phone.CONTENT_URI, null,contract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null);
if(phone != null)
{
phone.moveToFirst();
contact_data.phone=phone.getString(phone.getColumnIndex(contract.CommonDataKinds.Phone.NUMBER));
}
cursor.close();
phone.close();
}
return contact_data;
}
</script>
</body>
</html>
加载更多