안드로이드 webview 페이지 로딩 확인

(webview onProgressChanged함수)



안드로이드의 페이지 로딩의 되었는지 

0 - 100으로 나타내는 함수.



webViewMain = (WebView) findViewById(R.id.WebViewMainActivityWebView);
webViewMain.setWebChromeClient(new WebChromeClient(){
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
Log.i("WebView", "Progress: " + String.valueOf(newProgress));
}
});




결과화면






블로그 이미지

미나미나미

,

안드로이드 webview alert

(webview onJsAlert 함수)



안드로이드 웹뷰에서 alert 구문이 있을 때,

alert문을 뭔가 어설프게 표현되는 바꾸는 부분

설정해주면 좋을 것 같습니다.



webViewMain = (WebView) findViewById(R.id.WebViewMainActivityWebView);
webViewMain.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result){
final JsResult finalRes = result;
new AlertDialog.Builder(view.getContext())
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
finalRes.confirm();
}
})
.setNegativeButton(android.R.string.cancel,
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finalRes.cancel();
}
})
.create()
.show();
return true;
}
});





결과화면



블로그 이미지

미나미나미

,

안드로이드 webview 뒤로가기 

(webview canGoBack , goBack함수)



안드로이드 웹뷰에서 뒤로가기 버튼을 할때,

페이지가 있으면 돌아가고,

없을 경우 앱을 종료합니다.



@Override
public void onBackPressed() {
super.onBackPressed();
//WebVirwMain은 Webview webViewMain;
//webViewMain = (WebView) findViewById(R.id.Activity);
if (webViewMain.canGoBack()) { // 뒤로가기 눌렀을 때, 뒤로 갈 곳이 있을 경우
webViewMain.goBack(); // 뒤로가기
} else {//뒤로 갈 곳이 없는 경우
new AlertDialog.Builder(WebviewMain.this)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("종료!")
.setMessage("종료하시겠습니까?")
.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
})
.setNegativeButton("아니오", null)
.show();
}
}





블로그 이미지

미나미나미

,

안드로이드 마시멜로(API23) 이상 권한 체크 획득하기


안드로이드에서 퍼미션을 사용하기 위해서 권한을 

체크하는 부분이 필요합니다.






1. 안드로이드에서 시작화면이나 onCrate()함수 시작할 때, 

권한 체크할 함수를 작성합니다.






2.  ManifestCheck.java에서 권한을 확인합니다.

(아래의 전체코드를 확인하세요.)

(또한, 여러개의 권한 요청은 전체코드에 표현되어 있습니다.)


권한의 체크 과정을 아래와 같은 이미지로 진행됩니다.



아래의 코드의 이미지에서는 rquestPermissions와

shouldShowRequestPermissionRational까지 되어 있습니다.







나머지 onRequestPermissionResult를 사용하기 위해서는 

MainActivity 쪽에서 아래에 코드를 작성해주시고,

ManifestCheck.java 쪽에 아래의 코드를 작성해주시면 됩니다.






결과화면





블로그 이미지

미나미나미

,

안드로이드 화면 회전 감지(Android rotation detection)


안드로이드 화면의 전환시 

처리를 해야할 경우가 있습니다.

그래서, 기록합니다.



1. AndroidManifest.xml 에서 내가 감지할 Activity에 설정을 해줍니다. 

예를 들어, MainActivty를 감지해야하는 경우. 

아래와 같이 작성을 합니다.

<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboard|keyboardHidden"
>


2. MainActivty.java에서 onConfigurationChanged 함수를 Overrid 해줍니다.


@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.d("onConfigurationChanged" , "onConfigurationChanged");
if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){//세로 전환시
Log.d("onConfigurationChanged" , "Configuration.ORIENTATION_PORTRAIT");
}else if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){ //가로전환시
Log.d("onConfigurationChanged", "Configuration.ORIENTATION_LANDSCAPE");
}else{

}
}


onCreate()함수 있는 곳에 두시면 됩니다.





블로그 이미지

미나미나미

,

안드로이드 웹뷰(WebView) 로컬 html 파일 열기



1. assets/www 을 만들어서 html 파일 넣기 


주황색 테두리 안에 넣어주세요.




2. loadUrl로 로컬 파일 불러오기


# 안드로이드 웹뷰 테스트하기 참고하세요.

 http://minaminaworld.tistory.com/84

mWebView = (WebView) findViewById(R.id.webView);
mWebView.loadUrl("file:///android_asset/www/test.html");


블로그 이미지

미나미나미

,

안드로이드(android) Gson(gson) 사용하기



안드로이드에서 Gson 사용하기




1. build.gradle(Module: app) -> depencies 에 추가하기 


complie에서 implementation으로 명시하는 것으로 변경되었다고 한다.


# 참고 사항 https://developer.android.com/studio/build/dependencies?utm_source=android-studio#dependency_configurations

implementation 'com.google.code.gson:gson:2.8.2'





2. 사용할 코드 부분에서 import를 한다.

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;

Gson gson = new Gson(); // Gson을 사용하기 위한 선언



예시로 String -> JsonArray -> JsonArray값들 출력


1. String 값을 JsonArray로 변환 

JsonArray reader = gson.fromJson(message , JsonArray.class);
// message : Json Array의 값을 JSON.stringify()화를 만든 것을
// 다시 JsonArray를 만듭니다.


2. JsonArray값 출력

JsonObject obj = null; // JsonObject 값을 출력하기 위한 선언
for (int i = 0; i < reader.size(); i++) { //jsonArray 사이즈 만큼 loop
obj = reader.get(i).getAsJsonObject();//jsonArray 배열 JsonObject를 가져옴
Log.d(getClass().getName() , obj.toString()); //toString으로 출력
}


# 참고 사이트 : https://www.mkyong.com/java/how-do-convert-java-object-to-from-json-format-gson-api/




블로그 이미지

미나미나미

,

웹뷰(webview) 하얗게 나오는 경우(ssl인증 무시하기)


대형 사이트들의 경우 https 통신과 

ssl 인증서가 있음으로 웹뷰를 통해서 정상적으로 

표시가 되나 없는 경우 하얗게 아무것도 안나오는 경우가 있다.

이런 경우, 그냥 통과하는 코드를 작성해주면 된다.




1. ssl 부분을 통과할 java 파일 생성 


나의 경우 SslWebViewConnect.java를 생성


import android.net.http.SslError;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;

//웹뷰 로드시 SSL 인증서 에러 방지
public class SslWebViewConnect extends WebViewClient {

@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // SSL 에러가 발생해도 계속 진행!
}

public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;//응용프로그램이 직접 url를 처리함
}
}



2. webview를 생성할 때 처리를 한다.



#참고 http://minaminaworld.tistory.com/84를 참고하시면 더 빠르게 이해가 가능합니다.

WebSettings webSettings = webView1.getSettings();

webSettings.setJavaScriptEnabled(true);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setUseWideViewPort(true);
webSettings.setSafeBrowsingEnabled(false);
webSettings.setGeolocationEnabled(true);
webSettings.setDomStorageEnabled(true);
/*
필요한 설정은 참고
setJavaScriptEnabled(true);
// javascript를 실행할 수 있도록 설정
setJavaScriptCanOpenWindowsAutomatically (true);
// javascript가 window.open()을 사용할 수 있도록 설정
setBuiltInZoomControls(false);
// 안드로이드에서 제공하는 줌 아이콘을 사용할 수 있도록 설정
setPluginState(WebSettings.PluginState.ON_DEMAND);
// 플러그인을 사용할 수 있도록 설정
setSupportMultipleWindows(false);
// 여러개의 윈도우를 사용할 수 있도록 설정
setSupportZoom(false);
// 확대,축소 기능을 사용할 수 있도록 설정
setBlockNetworkImage(false);
// 네트워크의 이미지의 리소스를 로드하지않음
setLoadsImagesAutomatically(true);
// 웹뷰가 앱에 등록되어 있는 이미지 리소스를 자동으로 로드하도록 설정
setUseWideViewPort(true);
// wide viewport를 사용하도록 설정
setCacheMode(WebSettings.LOAD_NO_CACHE);
// 웹뷰가 캐시를 사용하지 않도록 설정
*/
webView1.setWebViewClient(new SslWebViewConnect());
//ssl 인증이 없는 경우 해결을 위한 부분
webView1.setWebChromeClient(new WebChromeClient() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onPermissionRequest(final PermissionRequest request) {
request.grant(request.getResources());
}
});


블로그 이미지

미나미나미

,