因項目需要,需要手機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;
// }
}