Android WebView通信

本文介绍了Android中如何实现与WebView的通信。从Web端通过alert方法向Android发送数据,Android重写WebChromeClient的onJsAlert进行接收。反之,Android通过点击网页按钮,调用webview的loadUrl加载JS方法并传递JSON参数,方便Web端解析使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web方面

代码如下

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Android WebView Test</title>
<script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
<script>
    function toClient() {
        var order = $("#val").val();
        alert(order)
    }

    function getInfoFromAndroid(){
        window.fover.clickonAndroid();
    }

    function fromClinet(str) {
        $("#fromclient").text("iemi :" + str.iemi + " wifiMac : " + str.wifiMac + " phoneName :" + str.phoneName + " androidVersion :" + str.androidVersion);
    }

</script>
</head>
<body>Android WebView传递数据Demo
<br/>
<input type="submit" value="从Android获取信息" onclick="getInfoFromAndroid()"/>
<br/>
显示返回:<label id="fromclient"></label><br/>
输入一个字符串:<br/>
<input id="val"/>
<input type="submit" value="点击提交给客户端" onclick="toClient()"/>
<br/>

</body>
</html>

ANDROID 部分代码

package cn.fover.webdemo;

import android.content.Context;
import android.content.SharedPreferences;
import android.net.wifi.WifiManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

private WebView mWebView;
private String mJson;
private EditText mEdit;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    preInfo();

    mEdit = (EditText) findViewById(R.id.hostName);
    String host = getSharedPreferences("Fover", Context.MODE_PRIVATE).getString("host", "");
    mEdit.setText(host);

    mWebView = (WebView) findViewById(R.id.webView);
    WebSettings setting = mWebView.getSettings();
    setting.setJavaScriptEnabled(true);
    mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);

    WebChromeClient myClient = new WebChromeClient() {
        @Override
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            result.confirm();
            Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
            return true;
        }
    };
    mWebView.addJavascriptInterface(new AndroidClick(), "fover");
    mWebView.setWebChromeClient(myClient);


    findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String host = mEdit.getText().toString();
            if (TextUtils.isEmpty(host)) {
                Toast.makeText(MainActivity.this, "请输入服务器地址", Toast.LENGTH_SHORT).show();
            } else {
                host = "http://" + host;
                mWebView.loadUrl(host);
                MainActivity.this.getSharedPreferences("Fover", Context.MODE_PRIVATE).edit().putString("host", host.substring(7, host.length())).commit();
            }
        }
    });
}

/**
 * 获取各种信息
 */
private void preInfo() {
//        获取IEMI
    String imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
            .getDeviceId();
//        获取WIFI的mac地址
    WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    String wifiMac = wifi.getConnectionInfo().getMacAddress();
//        获取Android版本

    String androidModel = Build.MODEL;
    String sdk = Build.VERSION.SDK;

    InfoEntity entity = new InfoEntity(imei, wifiMac, androidModel, sdk);
    mJson = new Gson().toJson(entity);

    System.out.println(mJson);

}


private class AndroidClick {
    @JavascriptInterface
    public void clickonAndroid() {
        mWebView.post(new Runnable() {
            @Override
            public void run() {
                mWebView.loadUrl("javascript:fromClinet(" + mJson + ")");
            }
        });
    }
}
}

说明

  • 从web给Android发送消息

从web给Android发送消息主要使用alert方法,直接alert(需要传递的数据),Android端重写WebChromeClient的onJsAlert方法拦截事件,即可。

  • 从Android发送给webview

需要点击网页上的按钮,然后触发AndroidClick的clickonAndroid方法,当然这个方法名是可以自己定义的,在clickonAndroid的方法中使用webview的loadUrl指定js的方法,并传入参数,传入的参数可以是一个json格式的文件,在js访问的时候可以直接使用obj.xxx这样简单的方式访问,非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值