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

[转载]Android—WebView(网页中文本框调用系统联系人号码) – 莴笋炒肉 – 博客园.

今天和同事共同讨论了一个关于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代码:



<script type="text/javascript">// <!&#91;CDATA&#91;
function setText(xx){
document.getElementById('test').value=xx;
}
// &#93;&#93;></script>


<input id="test" onclick="javascript:window.xxxxxxxx.getContacts()" type="text" />

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏