最精要總結-Android H5頁面中實現JavaScript調用Android java代碼

現在的App尤其是那些重業務邏輯並且又需要界面美化效果的,都會在程序內進行H5頁面跳轉,以實現預期的效果。之前總結過一篇關於WebView的文章但是側重點很多,很難令人理解並留下深刻印象。這裏單獨總結一下H5頁面中通過JavaScript調用Android 暴露出來的java方法代碼過程。直接給出示例,講解過程穿插在示例中:

首先將app的MainActivity對應的佈局文件中的組件換成WebView,因爲H5頁面並填充全屏:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</RelativeLayout>

然後新建一個MyObject.class類,在它的內部定義兩個方法,並暴露給JavaScript,供其調用:

package com.xw.mywebview;

import android.app.AlertDialog;
import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast;

public class MyObject {

    private  Context mContext;

    public MyObject(Context context) {
        mContext = context;
    }
    //該方法將暴露給JavaScript腳本調用
    @JavascriptInterface
    public void showToast(String name){
        Toast.makeText(mContext,name+"你好!",Toast.LENGTH_SHORT).show();
    }
    @JavascriptInterface
    public void showList(){
        new AlertDialog.Builder(mContext).setTitle("圖書列表")
                .setIcon(R.drawable.ic_launcher_background)
                .setItems(new String[]{"《天龍八部》","《神鵰俠侶》","《明朝那些事兒》","《漢朝那些事兒》","《少年維特之煩惱》"},null)
                .setPositiveButton("確定",null)
                .create().show();

    }

}

注意方法上註解@JavaScriptInterface的使用。在MainActivity中將Java對象暴露給JavaScript:

package com.xw.mywebview;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        WebView myWebView = findViewById(R.id.webview);
        myWebView.loadUrl("file:///android_asset/index.html");
        WebSettings webSettings = myWebView.getSettings();
        //開啓JavaScript調用
        webSettings.setJavaScriptEnabled(true);
        //將MyObject對象暴露給JavaScript,這樣index.html頁面中的JavaScript可以通過myObj來調用MyObject的方法
        myWebView.addJavascriptInterface(new MyObject(this),"myObj");
        
    }
}

這裏需要注意一下loadUrl的地址的寫法:"file:///android_asset/index.html"

myWebView.loadUrl("file:///android_asset/index.html");

這個" file:///android_asset/index.html "對應的目錄與res同級,沒有這個assets文件夾的話,右鍵main文件夾-->new-->Folder-->選擇Assets Folder即可:

最後,我們再準備這個一個index.html頁面,在頁面中創建2個H5按鈕,第一個按鈕點擊時調用Android的彈吐司方法,第二個按鈕點擊調用Android彈窗方法:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>JavaScript調用Android代碼</title>
</head>
<body>
  <!--注意此處的myObj是Android暴露出來的對象 -->
   <input type="button" value="打招呼" onclick="myObj.showToast('齊天大聖孫悟空');">
   <input type="button" value="圖書列表" onclick="myObj.showList();">
</body>
</html>

這個H5頁面安裝運行的效果如下:

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章