Android---WebView(网页中文本框调用系统联系人号码)

本文介绍如何在WebView中通过Java与JavaScript交互实现选择并获取系统联系人信息的功能。主要步骤包括:通过JavaScript触发Java方法打开系统联系人选项,利用onActivityResult回调处理选择结果,并通过JavaScript设置联系人电话到输入框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天和同事共同讨论了一个关于WebView中的文本控件去获得系统联系人的功能,之前单纯的以为只是点击文本框的时候弹出系统联系人Activity就ok了。立马浮现的想法就是在java方法中实现跳转功能,然后通过Js事件调用java方法,后面才知道选中某个联系人之后还要获得联系人号码赋给文本框。当时我就单纯的以为应该实现不了吧,但后来同事一提醒,如果传递号码作为客户端页面一个Js事件的参数然后为文本框赋值的话咧。这样确实是可行的,但java调用客户端Js的方法入口在哪里咧(必须是在关闭系统联系人之后,重现展现含有WebView的Activty时调用),说到这里应该有部分人会想到一个方法:onActivityResult();对就是这个方法在关闭系统联系人Activity之后会回调。但前提是调用系统联系人时是startActivityForResult();

整个思路就是这样的下面贴一些具体代码:

Java代码:(1)点击文本框时调用Java方法弹出系统联系人(怎样Js调用Java方法在下面的Js代码中)

复制代码
    
// 与网页进行交互的addJavascriptInterface()的方法
browser.addJavascriptInterface( new Object() {
@SuppressWarnings(
" unused " )
public void getContacts() {
Intent i1
= new Intent(Intent.ACTION_PICK,
android.provider.Contacts.People.CONTENT_URI);
startActivityForResult(i1, CODE_PHONEBOOK);

}
},
" xxxxxxxx " );
复制代码

(2)获得联系人之后调用客户端Js[setText(var value)]方法为文本框赋值

复制代码
    
@Override
protected void onActivityResult( int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
Cursor c = null ;
super .onActivityResult(requestCode, resultCode, data);
if (requestCode == CODE_PHONEBOOK) { // 电话本
try {
if (data != null ) {
c
= getContentResolver().query(data.getData(), null , null ,
null , null );
}
if (c != null ) {
c.moveToFirst();
for ( int i = 0 ; i < c.getColumnCount(); i ++ ) {
String name
= c.getColumnName(i);
String phoneNum
= c.getString(i);
if (name.equalsIgnoreCase( " number " )) {
currentWebView.loadUrl(
"javascript:setText('"
+ phoneNum + "')"
);
break ;
}
}
c.close();
}
}
catch (Exception e) {
e.getMessage();
}
}
}
复制代码

客户端Js代码:

复制代码
    
< html >
< head >
< script language ="javascript" type ="text/javascript" >
function setText(xx){
document.getElementById(
' test ' ).value = xx;
}
</ script >
</ head >
< body >
< input id ="test" type ="text" onclick ="javascript:window.xxxxxxxx.getContacts()" />
</ body >
</ html >
复制代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值