기술참고자료/Android
[Android] WebView 연습
농사꾼봉팔
2011. 5. 6. 14:13
WebViewTestActivity.java
구글 페이지가 열리게되면, 'shouldOverrideUrlLoading()' 메서드가 호출되고
뒤이어 'doUpdateVisitedHistory()' 메서드가 호출된다. 어떠한 링크를 클릭하여 클릭한 내역을 히스토리에 남기는 시점에 'doUpdateVisitedHistory()'이 호출되는데, 특정경로가 요청된 시점을 캐치하고 싶다면, 이 메서드내에서 url값을 파싱하여 해결할 수 있다.
예를들면, 어떠한 처리를 끝내고 특정 액티비티로 이동하고 싶다거나 할때 사용할 수 있을 것 같다.
'onLoadResource()' 메서드는 어떤놈인가 궁금해서 사용해보았는데, 그냥 이름 그대로 리소스관련 처리를 할때 사용되더라. 이미지 뿐 아니라 다양한 타입의 데이터를 요청할때에 로그가 찍히는것을 확인할 수 있다.
Log.d()를 사용하지 않고, Log.e()를 사용했는지 궁금해하시는분들은 ... 그냥 내맘이다 -_- 빨간색이 좋을뿐이다.
이밖에도 다양한 오버라이딩 메서드가 존재하더라.
각각 사용해보는것도 나쁘진 않겠지만 'onTooManyRedirects()' 같은 메서드들은 ... 상황에 맞게 테스트해야 할 것 같다. 웹뷰사용할때에 매니페스트에 권한 넣어주는거 잊지말기!
import android.app.Activity;WebViewClient.java
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);
}
}
import android.util.Log;웹뷰에 웹페이지를 출력하는 방법과 링크를 클릭했을때 링크경로를 캐치하여 어떠한 처리를 수행할 수 있는 방법에 대해 포스팅한다. 'WebViewTestActivity.java'가 메인액티비티이며, 'WebViewClient.java'가 이러한 처리를 수행하는 클래스이다. 물론 레이아웃에는 아래처럼 선언되어 있을테고...
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+"");
}
}
<?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()' 같은 메서드들은 ... 상황에 맞게 테스트해야 할 것 같다. 웹뷰사용할때에 매니페스트에 권한 넣어주는거 잊지말기!