频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
Android---WebView(网页中文本框调用系统联系人号码)
2012-06-04 14:51:38      个评论      
收藏   我要投稿

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

 


摘自 wangjinyu501的专栏

点击复制链接 与好友分享!回本站首页
上一篇:Android--自定义标题栏之显示网页加载进度
下一篇:Android Audio延迟(latency)
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站