Android쪽
public class LocalBrowser extends Activity {

    private static final String TAG = "LocalBrowser";
    private final Handler handler = new Handler();
    private WebView webView;
    private TextView textView;
    private Button button;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 화면에서 안드로이드 컨트롤 찾기
        webView = (WebView) findViewById(R.id.web_view);
        textView = (TextView) findViewById(R.id.text_view);
        button = (Button) findViewById(R.id.button);

        // 임베딩된 브라우저-WebView-에 자바스크립트 활성화하기
        webView.getSettings().setJavaScriptEnabled(true);

        // 자바 객체-AndroidBridge-를 브라우저의 자바 스크립트에 노출시키기
        // 객체, 노출할 DOM명칭
        webView.addJavascriptInterface(new AndroidBridge(), "android");

        // 임의의 WebChromeClient 객체를 생성하여 WebView에 등록.
        // 여기의 Chrome은 브라우저 창 주의를 정리하는 모든 작업을 일컬음. 즉, 브라우저 처리을 할 클라이언트를 등록
        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//                return super.onJsAlert(view, url, message, result);
                Log.d(TAG, "onJsAlert(" + view + ", " + url + ", " + message + ", " + result + ")");

                Toast.makeText(LocalBrowser.this, message, 3000).show();

                result.confirm(); // 결과 처리됨
                return true; // 여기서 처리했으므로 true 반환
            }
        });

        // 로컬 assets에서 웹 페이지 로딩하기
        webView.loadUrl("file:///android_asset/index.html");

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick(" + v + ")");

                // 자바스크립트 호출
                webView.loadUrl("javascript:callJS('Hello from Android')");
            }
        });
    }


    /**
     * 자바 스크립트에 노출된 객체
     *
     */
    private class AndroidBridge {
        public void callAndroid(final String arg) { // 반드시 final이어야 함

            handler.post(new Runnable() {

                @Override
                public void run() {
                    Log.d(TAG, "callAndroid(" + arg + ")");

                    textView.setText(arg);
                }
            });
        }
    }
}

WebView쪽
<html>
<head>
<script type="text/javascript">
    function callJS(arg) {
        document.getElementById("replaceme").innerHTML = arg;
    }
</script>
</head>
<body>
<h1>WebView</h1>
<p>
    <a href="#" onclick="window.alert('Alert from JavaScript');">Display JavaScript alert</a>
</p>
<p>
    <a href="#" onclick="window.andriod.callAndroid('Hello from Browser');"></a>
</p>
<p id="replaceme"></p>
</body>
</html>

addJavascriptInterface() 에서 설정한 DOM명칭 "android"로 WebView에서 호출가능하다.

- final 매개변수를 잘 사용하자. -> 메소드 내에서 변경하면 안되는 값(주소값)일 경우에 사용하면 유용할 듯

[Hello,World] Sudoku

프로그래밍/Android 2010. 8. 31. 00:01 Posted by galad
스도쿠 예제

Menu Activity

         I : 메뉴선택

Game Activity -> PuzzleView : 그래픽 처리
(게임 로직 처리)

[Hello,Android] Audio, Video

프로그래밍/Android 2010. 8. 30. 23:58 Posted by galad
Audio, Video 예제

Audio
- MediaPlayer 클래스를 사용.
- create한 개체를 release 안하면 런타임 에러 발생
- 실제론 하나의 소리에 대한 객체를 미리 모두 생성해놓고, 플레이하고, 어플 종료 시 릴리즈하는 식으로 사용하게 될 듯

        // 이전 MediaPlayer의 모든 리소스를 릴리스한다.
        // 아래의 릴리즈를 주석처리하면 사운드가 겹쳐서 들리게도 할 수 있으나, 릴리즈 안하고 계속 생성만 하다보면 런타임 오류 발생
        if(mp != null)
            mp.release();

        // 이 사운드를 재생하기 위해 새로운 MediaPlayer를 만든다.
        mp = MediaPlayer.create(this, resId);
        mp.start();

Video
- VideoView에 video파일 로드 후, start.
- 재생가능한 파일에 제약이 좀 있는 듯.

'프로그래밍 > Android' 카테고리의 다른 글

[Hello,Android] Android <-> WebView 간 호출하기  (1) 2010.08.31
[Hello,World] Sudoku  (0) 2010.08.31
[tip] LogCat 문자깨짐  (0) 2010.08.18
[Hello,Android] dip, sp  (0) 2010.08.17
[Hello,Android] 익명의 내부 클래스  (0) 2010.08.17

[tip] LogCat 문자깨짐

프로그래밍/Android 2010. 8. 18. 18:14 Posted by galad
윈도우즈-이클립스에서 LogCat에 UTF-8로 로그를 찍으면 글자가 깨짐.
(우분투 등 OS자체가 UTF-8이면 문제가 없는 듯?)

해결방법은 없는 듯하고 임시방편으로 다음과 같이 처리

1. 이클립스 메뉴의 Run -> Externel Tools -> Externel Tools Configurations... 클릭
2. Program 선택하고 New Launch Configuration 클릭
3. Name에 LogCat(아무거나), Main탭의 Location에 안드로이드 툴의 adb.exe 선택, Arguments에 logcat 입력, Common탭의 Console Encoding에서 UTF-8 선택하고 적용
4. Run하면 이클립스 콘솔창에 LogCat이 실행됨. 보기에는 별로지만 한글 지원됨.

http://code.google.com/p/android/issues/detail?id=1590


'프로그래밍 > Android' 카테고리의 다른 글

[Hello,World] Sudoku  (0) 2010.08.31
[Hello,Android] Audio, Video  (0) 2010.08.30
[Hello,Android] dip, sp  (0) 2010.08.17
[Hello,Android] 익명의 내부 클래스  (0) 2010.08.17
[Hello,Android] WebView 사용 시  (1) 2010.08.16

[Hello,Android] dip, sp

프로그래밍/Android 2010. 8. 17. 17:01 Posted by galad
px : 화면 위의 점. 디스플레이의 dpi(dots per inch)가 높아지면 그림이 작아짐.
dp : density-independent pixels. 밀도에 독립적인 화소. dpi가 높아지면 같이 커진다.
dip : 구글 예제에서 자주 쓰이는 dp와 동의어
sp : scale-independent pixels. 스케일에 독립적인 화소. 사용자의 글꼴 크기 설정에 따라서 확대/축소된다.

==> 인터페이스가 현재와 미래의 모든 디스플레이에 사용될 수 있으려면
텍스트 크기로는 sp 단위를, 그 외의 경우에는 dip 단위를 사용하고, 비트맵 보다는 벡터 그래픽을 사용하도록 한다.

'프로그래밍 > Android' 카테고리의 다른 글

[Hello,Android] Audio, Video  (0) 2010.08.30
[tip] LogCat 문자깨짐  (0) 2010.08.18
[Hello,Android] 익명의 내부 클래스  (0) 2010.08.17
[Hello,Android] WebView 사용 시  (1) 2010.08.16
[Hello,Android] 기본팁  (0) 2010.06.08
익명의 내부 클래스가 만들어질 때마다 1KB의 메모리가 소요된다고 한다...

주로 클릭 처리 등의 리스너에 많이 익명의 내부 클래스로 처리하는데, 가능한한 줄이는 것도 퍼포먼스를 위한 하나의 방법일 듯

'프로그래밍 > Android' 카테고리의 다른 글

[tip] LogCat 문자깨짐  (0) 2010.08.18
[Hello,Android] dip, sp  (0) 2010.08.17
[Hello,Android] WebView 사용 시  (1) 2010.08.16
[Hello,Android] 기본팁  (0) 2010.06.08
[Hello,Android] Activity Lifecycle  (0) 2010.06.07

[eclipse] plug-ins

프로그래밍/Library 2010. 8. 17. 14:21 Posted by galad
AnyEdit Tools   http://andrei.gmxhome.de/eclipse/   공백문자 표시 등 에디팅 편의 기능 -> 이건 쓸만한 듯
Checkstyle Plug-in   http://eclipse-cs.sf.net/update/   Source Code Analyzer -> 이건 모르겠음 ㅡ.ㅡ;;

html 에디터만 추가하기
Go to "Help" > "Install New Software" Choose to work with the site "http://download.eclipse.org/releases/galileo", Expand "Web, XML and Java EE development", Check "Web Page Editor" and click Next to continue with the install

'프로그래밍 > Library' 카테고리의 다른 글

[정규표현식] 태그 제거하기  (0) 2010.10.19
[ftp] FTP/SFTP/FTPS 의 차이점  (0) 2010.10.18
[browser] MS Expension Web SuperView  (0) 2010.04.08
[program] 프로파일러  (0) 2009.12.03
[Eclipse] Aptana Studio  (0) 2009.11.30