因项目需要,需要手机App,因为本身网站页面布局是采用bootstrap框架,所以可以采用Android Webview控件来将网页封装。
在此提醒一下,使用Android Webview控件的前提是网页必须本身能适应手机的布局。
为了将App做的美观一些,我觉得需要4动作,分别是:
1.load网站页面;
2.发生404错误时跳转到默认页面;
3.与js实现交互;
4.添加切入页面;
import android.content.pm.ActivityInfo;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.os.Build;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ImageView;
import android.widget.RelativeLayout;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private WebView myWebView;
private ImageView picture;
private Thread mThread;
private RelativeLayout mRelativeLayout;
private final static int msg_hasrecieved = 0;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //设置全屏
myWebView = (WebView) findViewById(R.id.id_webview);
myWebView.loadUrl("http://123.206.50.181:8080/MagicEcg/doctor/login");
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);//设置js可以直接打开窗口,如window.open(),默认为false
myWebView.getSettings().setJavaScriptEnabled(true);//是否允许执行js,默认为false。设置true时,会提醒可能造成XSS漏洞
myWebView.getSettings().setSupportZoom(false);//是否可以缩放,默认true
myWebView.getSettings().setBuiltInZoomControls(true);//是否显示缩放按钮,默认false
myWebView.getSettings().setLoadWithOverviewMode(true);//和setUseWideViewPort(true)一起解决网页自适应问题
myWebView.getSettings().setAppCacheEnabled(false);//是否使用缓存
myWebView.getSettings().setDomStorageEnabled(true);//DOM Storage
myWebView.setWebViewClient(new WebViewClient());
myWebView.getSettings().setAllowFileAccess(true); //设置在WebView内部是否允许访问文件,默认允许访问。
myWebView.getSettings().setAllowFileAccessFromFileURLs(true); //设置WebView运行中的一个文件方案被允许访问其他文件方案中的内容,默认值true
myWebView.getSettings().setAllowUniversalAccessFromFileURLs(true); //设置WebView运行中的脚本可以是否访问任何原始起点内容,默认true
// myWebView.getSettings().setUseWideViewPort(true); //设置WebView是否使用viewport,当该属性被设置为false时,加载页面的宽度总是适应WebView控件宽度;当被设置为true,当前页面包含viewport属性标签,在标签中指定宽度值生效,如果页面不包含viewport标签,无法提供一个宽度值,这个时候该方法将被使用。
myWebView.getSettings().setLoadWithOverviewMode(true); //设置WebView是否使用预览模式加载界面。
// 添加javascriptInterface
// 第一个参数:这里需要一个与js映射的java对象
// 第二个参数:该java对象被映射为js对象后在js里面的对象名,在js中要调用该对象的方法就是通过这个来调用
myWebView.addJavascriptInterface(new JSHook(), "hello");
//步骤3. 复写shouldOverrideUrlLoading()方法,使得打开网页时不调用系统浏览器, 而是在本WebView中显示
myWebView.setWebChromeClient(new WebChromeClient());
////404页面跳转,默认加载本地页面
myWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
view.loadUrl("file:///android_asset/DortorErroe.htm");
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
view.loadUrl("file:///android_asset/DortorErroe.htm");
}
});
}
//下面程序是实现与js交互,使页面加载时,js能实现下面的方法
//ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 是横屏 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT是竖屏
public class JSHook{
@JavascriptInterface
public void javaMethod1(){
Log.e(TAG, "javaMethod: in" );
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
@JavascriptInterface
public void javaMethod2(){
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
public String getInfo(){
return "获取手机内的信息!!";
}
}
// @Override
// //设置回退
// //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
// public boolean onKeyDown(int keyCode, KeyEvent event) {
// if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
// webView.goBack(); //goBack()表示返回WebView的上一页面
// this.finish();
// return true;
// }
// return false;
// }
}