在Android WebView中java方法與js方法的交互。

在android開發(fā)中經常涉及到webview中java方法與js方法的相互調用,在此我就小露一下身手。既然是相互調用,也就是說分為兩種情況:
1.js調用java方法。2.java調用js方法。話不多說,放代碼(多看代碼中的注釋)。

1.java代碼:

public class TestWebViewActivity extends AppCompatActivity {
    private WebView webView;
    private EditText et_content;
    private TextView submit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_webview);
        webView= (WebView) findViewById(R.id.webView);
        et_content= (EditText) findViewById(R.id.content);
        submit= (TextView) findViewById(R.id.submit);
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String msg=et_content.getText().toString();
                //2.java調用js方法
                webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");
            }
        });
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);
        //wusir作為注入接口別名,在html的js代碼部分會用到。
        webView.addJavascriptInterface(new JsInterface(),"wusir");
       //為了方便測試,我在項目本地的asset中加入了html文件,實際開發(fā)時請換成后臺開發(fā)給的url。
        webView.loadUrl("file:///android_asset/js_webview.html");
    }
    //1.js調用java方法,定義注入接口JsInterface
    private class JsInterface{
        @JavascriptInterface
        public void onSumResult(int result){
            Toast.makeText(getApplicationContext(), result+"", Toast.LENGTH_LONG).show();
        }
        @JavascriptInterface
        public void callPhone(String phone){
        //調用手機系統(tǒng)電話功能
            Uri uri = Uri.parse("tel:" + phone);
            Intent dialIntent = new Intent(Intent.ACTION_DIAL, uri);
            startActivity(dialIntent);
        }
    }
}

2.activity對應的布局代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<!--EditText和TextView用于java調用js方法-->
    <EditText
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="60dp" />
    <TextView
        android:id="@+id/submit"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:text="提交內容到webview的p標簽"
        android:textColor="#fff"
        android:gravity="center"
        android:background="@drawable/small_green_button"/>
<!--WebView用于js調用java方法-->
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="200dp"></WebView>
</LinearLayout>

3.js_webview.html代碼:

css代碼可以忽略,js代碼隨你放在head中,還是body中。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        #p1{
            width: 100%;
            height: 50px;
            line-height: 50px;
            color: #ffffff;
            background-color: #0066ff;
        }
    </style>
</head>
<body>
<script type="text/javascript">
    //1.js調用java方法
    function sumToJava(){
        window.wusir.onSumResult(1 + 2)
    }
    function callphone(){
        window.wusir.callPhone("15757184616")
    }
    //2.java調用js方法
    function showInfoFromJava(msg) {
        document.getElementById("p1").innerHTML=msg;
    }
</script>
<h3>1.js調用java方法實例</h3>
<button type="button" onclick="sumToJava()">1+2=</button>
<button type="button" onclick="callphone()">打電話</button>
<h3>2.java調用js方法實例</h3>
<p id="p1">Hello World!</p>
</body>
</html>

結語

好了,就是這些了,重點是不要混淆了1.js調用java方法、2.java調用js方法。如果有什么不妥之處請大佬指正。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容