webView中JavaScript调用Android方法

来源:互联网 发布:字幕下载软件 编辑:程序博客网 时间:2024/06/05 23:42

注:要在Manifest.xml注册访问网络权限

<!-- 访问网络权限 --><uses-permission android:name="android.permission.INTERNET" />

1,建立assets文件夹

注: 原来我们在使用Eclipse时,assets文件夹会在res/下面,可是在android studio中你在res/下面建立完之后,根本就不认。android studio把assets文件夹放到了和java,res文件夹同级的地方

2,在activity_search.xml布局文件中建立WebView用于显示html文件

<?xml version="1.0" encoding="utf-8"?><LinearLayout 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"    android:orientation="vertical"    tools:context="com.sdlj.vehiclerepair.activity.SearchActivity">    <WebView        android:id="@+id/wv_search_result"        android:layout_width="match_parent"        android:layout_height="match_parent"/></LinearLayout>

3,自定义MyObject.java类,用于暴露方法给JavaScript

public class MyObject {    Context mContext;    public MyObject(Context c){        mContext = c;    }    //该方法将会暴露给JavaScript脚本调用    /**     * @JavascriptInterface 尼玛,这个一定要在调用的方法上加,不加访问不到该方法,太坑了     */    @JavascriptInterface    public void showToast(String name){        Toast.makeText(mContext,name+",您好!",Toast.LENGTH_LONG).show();    }    //该方法将会暴露JavaScript脚本调用    /**     * @JavascriptInterface 尼玛,这个一定要在调用的方法上加,不加访问不到该方法,太坑了     */    @JavascriptInterface    public void showList(){        //显示一个普通的列表对话框        new AlertDialog.Builder(mContext)                .setTitle("图书列表")                .setIcon(R.mipmap.ic_launcher)                .setItems(new String[]{"疯狂java讲义","疯狂Android讲义","轻量级java EE企业应用实战"},null)                .create()                .show();    }}

4,在assets文件夹下建立一个demo2.html文件

<!DOCTYPE html><html>    <head>        <meta http-equiv="content-type" content="demo1.html"; charset="utf-8">        <title>JS调用Android</title>    </head>    <body>        <!--注意此处的myObj是Android暴露出来的对象-->        <input type="button" value="打招呼" onclick="myObj.showToast('孙悟空');">        <input type="button" value="图书列表" onclick="myObj.showList();">    </body></html>

5,在Activity中调用

public class SearchActivity extends AppCompatActivity {    public static final String TAG = "ZCN_SearchActivity";    private WebView wvSearchResult;    WebSettings webSettings;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_search);        initView();    }    @SuppressLint("JavascriptInterface")    private void initView() {        wvSearchResult = (WebView)findViewById(R.id.wv_search_result);        wvSearchResult.loadUrl("file:///android_asset/demo2.html");        //获取Webview的设置对象        webSettings = wvSearchResult.getSettings();        //开启JavaScript调用        webSettings.setJavaScriptEnabled(true);        //将MyObject对象暴露给JavaScript脚本        //这样在demo2.html页面中的JavaScript也可以通过myObj来调用MyObject的方法        wvSearchResult.addJavascriptInterface(new MyObject(this),"myObj");    }}
阅读全文
0 0