android交互h5 最详细篇
程序员文章站
2022-04-06 08:03:30
这些代码任何h5都可以调用 我踩过坑的这些代码里面都保障了你不再去踩坑 这是调用篇 下一篇2 我去总结如何交互 WebView webView = findViewById(R.id.webView); String a="";//放的网页链接!!! webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient());...
这些代码任何h5都可以调用 我踩过坑的这些代码里面都保障了你不再去踩坑 这是调用篇 下一篇2 我去总结如何交互
WebView webView = findViewById(R.id.webView);
String a="";//放的网页链接!!!
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(WebViewActivity.this,"android");//h5调用android时候用 1:第一个参数 网页当前上下文 2:给h5调用你的一个名字 可以自己定义 待会儿就有用了
webView.setVerticalScrollBarEnabled(false); //网页右边的滚动条垂直不显示
webView.loadUrl(a);//加载h5
//访问网页
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//使用WebView加载显示url
view.loadUrl(url);
Log.i("ziyuan1",""+url);
//返回true
return true;
}
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
Log.i("ziyuan2",""+url);
view.loadUrl(url);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); //表示等待证书响应
// handler.cancel(); //表示挂起连接,为默认方式
// handler.handleMessage(null); //可做其他处理 s
}
});
//声明WebSettings子类
WebSettings webSettings = webView.getSettings();
// 特别注意:5.1以上默认禁止了https和http混用,以下方式是开启
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
String ua = webSettings.getUserAgentString();
webSettings.setUserAgentString(ua+"");//随便写个英文 推荐就写app的名字 类似于淘宝:taobao。让h5知道是你android来访问的
//如果访问的页面中要与Javascript交互,则webview必须设置支持 Javascript
webSettings.setJavaScriptEnabled(true);
// 若加载的 html 里有JS 在执行动画等操作,会造成资源浪费(CPU、电量)
// 在 onStop 和 onResume 里分别把 setJavaScriptEnabled() 给设置成 false 和 true 即可
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//其他细节操作
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
//优先使用缓存:
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//缓存模式如下:
//LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
//LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
//LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
//LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。
//启动webview的html5的本地存储功能。
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheMaxSize(1024*1024*8);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(appCachePath);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
}
//下面的也写一个activity
//按返回键时候
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
//销毁Webview
@Override
protected void onDestroy() {
if (webView != null) {
webView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
webView.clearHistory();
((ViewGroup) webView.getParent()).removeView(webView);
webView.destroy();
webView = null;
}
super.onDestroy();
}
//暂停
@Override
public void onPause() {
if (webView != null) {
webView.pauseTimers();
webView.onPause();
}
super.onPause();
}
本文地址:https://blog.csdn.net/qq_45312619/article/details/109626492
上一篇: 99%玩家都没搞懂的社群五重天