Android WebView通信

来源:互联网 发布:淘宝店促销价怎么设置 编辑:程序博客网 时间:2024/06/11 02:26

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;@Overrideprotected 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这样简单的方式访问,非常方便。

1 0
原创粉丝点击