[Android] WebView 연습

WebViewTestActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;

public class WebViewTestActivity extends Activity {
 private WebView mWebView;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
  mWebView = (WebView) findViewById(R.id.webview);
  mWebView.getSettings().setJavaScriptEnabled(true);  // 웹뷰에서 자바스크립트실행가능
  mWebView.loadUrl("http://www.google.com");    // 구글홈페이지 지정
  mWebView.setWebViewClient(new WebViewClient());  // WebViewClient 지정         
    }

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {

  if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
            mWebView.goBack();
            return true;
        }
 
        return super.onKeyDown(keyCode, event);
 }  
}
WebViewClient.java
import android.util.Log;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewClient extends WebViewClient {

 @Override
 public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        Log.e("shouldOverrideUrlLoading >>> ", url+"");
        return true;

 }

 @Override
 public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
  super.doUpdateVisitedHistory(view, url, isReload);
  Log.e("doUpdateVisitedHistory >>> ", url+"");
 }

 @Override
 public void onLoadResource(WebView view, String url) {
  super.onLoadResource(view, url);
  Log.e("onLoadResource >>> ", url+"");
 }
}
웹뷰에 웹페이지를 출력하는 방법과 링크를 클릭했을때 링크경로를 캐치하여 어떠한 처리를 수행할 수 있는 방법에 대해 포스팅한다. 'WebViewTestActivity.java'가 메인액티비티이며, 'WebViewClient.java'가 이러한 처리를 수행하는 클래스이다. 물론 레이아웃에는 아래처럼 선언되어 있을테고...

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <WebView
        android:id="@+id/webview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />
</LinearLayout>
레이아웃은 심플하다.
구글 페이지가 열리게되면, 'shouldOverrideUrlLoading()' 메서드가 호출되고
뒤이어 'doUpdateVisitedHistory()' 메서드가 호출된다. 어떠한 링크를 클릭하여 클릭한 내역을 히스토리에 남기는 시점에 'doUpdateVisitedHistory()'이 호출되는데, 특정경로가 요청된 시점을 캐치하고 싶다면, 이 메서드내에서 url값을 파싱하여 해결할 수 있다.

예를들면, 어떠한 처리를 끝내고 특정 액티비티로 이동하고 싶다거나 할때 사용할 수 있을 것 같다.

'onLoadResource()' 메서드는 어떤놈인가 궁금해서 사용해보았는데, 그냥 이름 그대로 리소스관련 처리를 할때 사용되더라. 이미지 뿐 아니라 다양한 타입의 데이터를 요청할때에 로그가 찍히는것을 확인할 수 있다.
Log.d()를 사용하지 않고, Log.e()를 사용했는지 궁금해하시는분들은 ... 그냥 내맘이다 -_- 빨간색이 좋을뿐이다.

이밖에도 다양한 오버라이딩 메서드가 존재하더라.
각각 사용해보는것도 나쁘진 않겠지만 'onTooManyRedirects()' 같은 메서드들은 ... 상황에 맞게 테스트해야 할 것 같다. 웹뷰사용할때에 매니페스트에 권한 넣어주는거 잊지말기!