이미지 저작권 설정에 이은 웹앱 편의성을 위한 추가 설정이다.
필요한 설정을 추가 할 때 마다 여기에도 추가하도록 하겠음..
세로모드 고정
AndriodManifest.xml
android:screenOrientation="portrait" 추가
onCreate
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 추가
뒤로 가기 버튼 핸들링
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
long tempTime = System.currentTimeMillis();
long intervalTime = tempTime - backPressedTime;
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
// 로그인 혹은 메인 화면에서 뒤로가기 클릭 시 앱 종료 토스트 발생
if(webView.getUrl().equals(url + "/user/main") ||
webView.getUrl().equals(url + "/login")) {
if (0 <= intervalTime && FINISH_INTERNAL_TIME >= intervalTime) finish();
else {
backPressedTime = tempTime;
Toast.makeText(getApplicationContext(), "한번 더 누르면 앱이 종료됩니다.", Toast.LENGTH_SHORT).show();
}
}
else if (webView.getUrl().equals(url + "/user/profile")){
webView.loadUrl(url + "/user/main");
// 이 외에는 뒤로가기 버튼 허용
} else {
webView.goBack();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
SSL 인증서 무시
private static class WebViewClientClass extends WebViewClient {
@SuppressLint("WebViewClientOnReceivedSslError")
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(String.valueOf((request.getUrl())));
return true;
}
}
캡쳐방지
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
세로모드로 고정
// 세로모드로 고정 + Manifest.xml portrait 추가 해야함
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
웹뷰에서 자바 스크립트로 빌드 된 화면을 렌더링 할 수 있도록 설정
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
웹뷰가 동작할 떄 호환되는 브라우저 설정, Front 개발 환경에 맞게 설정하면 되는데 나같은 경우 크롬으로 설정
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClientClass());
웹뷰 로드 시 캐시 및 히스토리를 삭제해 웹 업데이트나 새로고침 등을 반영하도록 하는 설정
webView.clearCache(true);
webView.clearHistory();
webView.loadUrl(url);
네트워크가 없을 때 웹 url을 보이지 않도록 예외처리
if(!isNetworkAvailable(this)){
Toast toast = Toast.makeText(this, "따북: 인터넷 연결을 확인해주세요.", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, Gravity.CENTER_HORIZONTAL, Gravity.CENTER_VERTICAL);
toast.show();
ActivityCompat.finishAffinity(this);
}
...(생략)
private Boolean isNetworkAvailable(MainActivity application) {
ConnectivityManager connectivityManager = (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
Network nw = connectivityManager.getActiveNetwork();
if (nw == null) return false;
NetworkCapabilities actNw = connectivityManager.getNetworkCapabilities(nw);
return actNw != null && (actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || actNw.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH));
}