Android---WebView(網頁中文字框調用系統連絡人號碼)

來源:互聯網
上載者:User

今天和同事共同討論了一個關於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的專欄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.