志在指尖
用双手敲打未来

通过 webview 将网页打包成安卓应用

近期团队接到一个新的项目,企业内部的一个掌上超市项目,开端考虑经过大众号或者小程序来做,后边说是布置在企业内网,就考虑到做网站运用,因为需要经过运营商分配的apn衔接企业内网,所以在打开运用之前需要检测一下网络,如果是web端的话,那就无法检测网络了,所以考虑运用安卓的webview封装一下H5的运用。
1、装备网络衔接权限
在AndroidManifest.xml文件中加上以下装备信息
<uses-permissionandroid:name=”android.permission.INTERNET”/>
注:从Android9.0(API级别28)开端,默许情况下禁用明文支持。因此http的url均无法在webview中加载,所以只装备以上信息或许会导致net::ERR_CLEARTEXT_NOT_PERMITTED报错,还需要在装备文件的application中参加下面的装备。参照文章:net::ERR_CLEARTEXT_NOT_PERMITTED
android:usesCleartextTraffic=”true”
webview网络装备反常
net::ERR_CLEARTEXT_NOT_PERMITTED装备
2、创立layout文件
运用idea的话,会自动创立MainActivity和对应的layout文件,直接在文件的基础上修改即可,运用Webview控件,如果需要运用进展条的话,能够将ProgressBar的装备打开即可。
xmlversion=”1.0″encoding=”utf-8″?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android=”http://schemas.android.com/apk/res/android”xmlns:tools=”http://schemas.android.com/tools”xmlns:app=”http://schemas.android.com/apk/res-auto”android:layout_width=”match_parent”android:layout_height=”match_parent”tools:context=”com.ctjsoft.jxf.shop.MainActivity”><WebViewandroid:id=”@+id/webview”android:layout_width=”match_parent”android:layout_height=”match_parent”/>androidx.constraintlayout.widget.ConstraintLayout>
3、修改MainActivity文件
重写onCreate办法:
protectedvoidonCreate(@NullableBundlesavedInstanceState){super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//progressBar=(ProgressBar)findViewById(R.id.progressbar);//进展条webView=(WebView)findViewById(R.id.webview);
webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
webView.getSettings().setAllowFileAccessFromFileURLs(true);//webview的设置中添加如下代码try{if(Build.VERSION.SDK_INT>=16){
Classclazz=webView.getSettings().getClass();
Methodmethod=clazz.getMethod(“setAllowUniversalAccessFromFileURLs”,boolean.class);if(method!=null){
method.invoke(webView.getSettings(),true);
}
}
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(NoSuchMethodExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}catch(InvocationTargetExceptione){
e.printStackTrace();
}//webView.loadUrl(“http://172.17.1.176:8082/”);//加载urlwebView.loadUrl(API);//运用webview显现html代码//webView.loadDataWithBaseURL(null,”欢迎您”+//”
运用webview显现html代码
“,”text/html”,”utf-8″,null);webView.addJavascriptInterface(this,”android”);//添加js监听这样html就能调用客户端webView.setWebChromeClient(webChromeClient);
webView.setWebViewClient(webViewClient);
WebSettingswebSettings=webView.getSettings();/**
*LOAD_CACHE_ONLY:不运用网络,只读取本地缓存数据
*LOAD_DEFAULT:(默许)依据cache-control决议是否从网络上取数据。
*LOAD_NO_CACHE:不运用缓存,只从网络获取数据.
*LOAD_CACHE_ELSE_NETWORK,只需本地有,不管是否过期,或者no-cache,都运用缓存中的数据。
*/webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//不运用缓存,只从网络获取数据.webView.getSettings().setTextZoom(100);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//设置js能够直接打开窗口,如window.open(),默以为falsewebView.getSettings().setJavaScriptEnabled(true);//是否允许执行js,默以为false。设置true时,会提醒或许造成XSS缝隙webView.getSettings().setSupportZoom(true);//是否能够缩放,默许webView.getSettings().setBuiltInZoomControls(true);//是否显现缩放按钮,默许falsewebView.getSettings().setUseWideViewPort(true);//设置此属性,可任意份额缩放。大视图模式webView.getSettings().setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题webView.getSettings().setAppCacheEnabled(true);//是否运用缓存webView.getSettings().setDomStorageEnabled(true);//DOMStorage}
“`
装备WebviewClient
//WebViewClient首要帮助WebView处理各种告诉、请求事情privateWebViewClientwebViewClient=newWebViewClient(){@OverridepublicvoidonPageFinished(WebViewview,Stringurl){//页面加载完结//progressBar.setVisibility(View.GONE);}publicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon){//页面开端加载//progressBar.setVisibility(View.VISIBLE);}@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,WebResourceRequestrequest){Android
Log.i(“ansen”,”阻拦url:”+request.getUrl());returnsuper.shouldOverrideUrlLoading(view,request);
}
};//WebChromeClient首要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进展等privateWebChromeClientwebChromeClient=newWebChromeClient(){//不支持js的alert弹窗,需要自己监听然后经过dialog弹窗publicbooleanonJsAlert(WebViewwebView,Stringurl,Stringmessage,JsResultresult){
AlertDialog.BuilderlocalBuilder=newAlertDialog.Builder(webView.getContext());
localBuilder.setMessage(message).setPositiveButton(“确认”,null);
localBuilder.setCancelable(false);
localBuilder.create().show();//注意://必须要这一句代码:result.confirm()表示://处理结果为确认状况一起唤醒WebCore线程//否则不能持续点击按钮result.confirm();returntrue;
}//获取网页标题@OverridepublicvoidonReceivedTitle(WebViewview,Stringtitle){super.onReceivedTitle(view,title);
Log.i(“ansen”,”网页标题:”+title);
}//加载进展回调@OverridepublicvoidonProgressChanged(WebViewview,intnewProgress){//progressBar.setProgress(newProgress);}
};@OverridepublicbooleanonKeyDown(intkeyCode,KeyEventevent){
Log.i(“ansen”,”是否有上一个页面:”+webView.canGoBack());if(webView.canGoBack()&&keyCode==KeyEvent.KEYCODE_BACK){//点击回来按钮的时候判断有没有上一页webView.goBack();//goBack()表示回来webView的上一页面returntrue;
}returnsuper.onKeyDown(keyCode,event);
}/**
*JS调用android的办法
*
*@paramstr
*@return*/@JavascriptInterface//仍然必不可少publicvoidgetClient(Stringstr){
Log.i(“ansen”,”html调用客户端:”+str);
}@OverrideprotectedvoidonDestroy(){super.onDestroy();//释放资源webView.destroy();
webView=null;
}

未经允许不得转载:IT技术网站 » 通过 webview 将网页打包成安卓应用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载