출처: http://blog.naver.com/vhahrtkd/90171455819
package kr.or.ddit.exweb;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.util.Log;
import android.view.Menu;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class ExWebActivity extends Activity {
private WebView wv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
wv = new WebView(this); // 웹 브라우저 역할을 하는 웹뷰 생성
setContentView(wv); // 액티비티 화면(윈도우)에 웹뷰 배치
WebSettings ws = wv.getSettings(); //웹뷰의 브라우저 관련 설정을 설정 객체를 통해서
ws.setJavaScriptEnabled(true); // 웹뷰 내의 웹문서가 자바스크립트 사용 가능
// alert, confirm, prompt등 브라우저 UI와 관련된 작업을 처리하는 객체
//wv.setWebChromeClient(new WebChromeClient());
wv.setWebChromeClient(new MyWebChromeClient());
//웹뷰 내의 링크 클릭시 페이지 이동 등 컨텐츠 렌더링과 관련된 작업을 처리하는 객체
//wv.setWebViewClient(new WebViewClient());
wv.setWebViewClient(new MyWebViewClient());
wv.loadUrl("file:///android_asset/index.html"); // 웹뷰에 웹문서 로드
// wv.addJavascriptInterface(object, name)
// 웹 뷰 wv 내의 웹 문서의 자바스크립트에서
// "window.name.메서드명()" 과 같은 형태로
// Object 의 메서드들을 실행 시킬 수 있게 된다.
// MyInterface 객체의 메서드들을 실행시킬수 있게 된다.
wv.addJavascriptInterface(new MyInterface(), "java");
}
// JavaScript Object ---------------------------------------------------------
class MyInterface{
private int count =0;
// 자바스크립트로부터 인자를 받을 수도 있고,
// 결과를 자바스크립트로 리턴(반환) 할 수 있다.
public String callJava(String str){
return str + "fromJAVA" + (++count);
}
public void click(){
Log.d("DDIT", "Java 코드의 Click 메서드 실행");
// 웹 뷰 내의 현재 웹문서에 존재하는 자바스크립트 함수 실행.
wv.loadUrl("javascript:changeImg()");
}
}
// WebViewClient 내부 클래스 -----------------------------------------------------
class MyWebViewClient extends WebViewClient{
// 이 웹뷰 클라이언트와 연결된 웹뷰가 웹문서 로드를 시작할 때 실행
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
Log.d("DDIT", "onPageStarted : " + url);
super.onPageStarted(view, url, favicon);
}
// 이 웹뷰 클라이언트와 연결된 웹뷰가 웹문서 로드가 완료되면 실행
@Override
public void onPageFinished(WebView view, String url) {
Log.d("DDIT", "onPageFinished : " + url);
super.onPageFinished(view, url);
}
// 웹 뷰 내에서 링크를 클릭하거나 포워딩으로 페이지 이동이 일어날 때 실행되는 메서드
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.startsWith("http://m.naver.com")){
view.loadUrl("http://m.daum.net");
Toast.makeText(view.getContext(), "No,No,No",
Toast.LENGTH_SHORT).show();
return true;
}else if(url.startsWith("myapp://")) {
Toast.makeText(view.getContext(),
url.substring(url.lastIndexOf("/")),
Toast.LENGTH_SHORT).show();
return true;
}
return super.shouldOverrideUrlLoading(view, url);
}
}
// WebChormeClient 내부 클래스 --------------------------------------------------
class MyWebChromeClient extends WebChromeClient{
// 이 웹크롬클라이언트와 연결된 웹뷰 내에서 alert()이 호출되면 실행
// alert이 호출된 웹뷰와 현재 url, alert에 전달된 메시지 문자열,
// alert 결과를 설정할 수 있는 JsResult 객체가 인자로 전달된다.
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
Toast.makeText(view.getContext(), message, Toast.LENGTH_SHORT).show();
result.confirm(); // alert 창에서 사용자가 확인을 누른 것처럼 조작.
//return super.onJsAlert(view, url, message, result);
return true;
}
// 이 웹크롬 클라이언트와 연결된 웹뷰가 웹문서를 로드할 때 현재 몇 퍼센트로
// 로드되었는지가 인자로 전달되면서 지속적으로 실행.
@Override
public void onProgressChanged(WebView view, int newProgress) {
// 안드로이드에서 sysout 은 logcat으로 출력된다
System.out.println("onProgressChanged : " + newProgress);
// 안드로이드에서 sysout 대신 Log.xx 메서드로 디버그 메시지 출력
// Log.x("태그문자열", "메시지문자열");
// Log 메서드는 기능은 동일하며
// 각각 d(debug), e(error), i(information, v(verbose), w(warning)출력용
Log.d("DDIT","onProgressChanged : " + newProgress);
super.onProgressChanged(view, newProgress);
}
}
}
--AndroidManifest.xml------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="kr.or.ddit.exweb"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="kr.or.ddit.exweb.ExWebActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
---------------------------------------------------------------------------------
'모바일앱 > 안드로이드' 카테고리의 다른 글
멀티미디어 실습 (0) | 2015.04.15 |
---|---|
파일 위치에 따른 미디어 재생 샘플코드 (0) | 2015.04.15 |
안드로이드 스튜디오 vs 이클립스 단축키 정리 (0) | 2015.04.13 |
[안드로이드] 안드로이드 시작하기 (0) | 2014.07.09 |
브로드캐스트 리시버 관련 인텐트의 액션들 (0) | 2013.10.29 |