テクパー2020
テクニカルヘルパー


 アンドロイドアプリ開発 

◆ JavaScripの連携
・ assets フォルダー内にJavaScriptのあるWebページを作成します
・ WebページでJavaScriptを呼び出します

【 実行 】


【 JavaScriptの結果 】


1.新規プロジェクトで 「 WebJavaScriptIF 」 を新規に作成します

1)ファイル(F) → 新規(N) → プロジェクト(P)

2)Android の Android プロジェクト を選択し、[次へ(N)]ボタン をクリック
・プロジェクト名に 「 WebJavaScriptIF 」 を入力
・ビルド・ターゲットの □ Android 2.2 を チェック (最新のバージョン)
・アプリケーション名に 「 WebJavaScriptIF 」 を入力
・パッケージ名に 「 任意のドメイン名 」 を入力 (ドメイン名をパッケージ名に利用)
・□ Create Activityがチェック状態で、名称に 「 WebJavaScriptIF 」 を入力
・[完了]ボタン をクリック

2.HTMLファイルと画像(イメージ)の配置

1)assets のフォルダー上で右クリック → インポート
・一般 → ファイル・システム
・[次へ]ボタン をクリック
・次のディレクトリーから(Y)にHTMLファイルと画像(イメージ)があるフォルダーを指定
(参照ボタンで指定)
・取得するHTMLファイルと画像(イメージ)をチェック
・[完了]ボタン をクリック

≪JavaScriptのHTML : checker.html≫ の例
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<html>
<head>
  <script language="javascript">
    function changeImage() {
        alert("A");
        document.getElementById("image").src="bt_img_square_back.png";
        alert("B");
    }
  </script>
</head>
<body>
  <h4 style="color:magenta">JavaScript連携のチェック</h4>
    矢印をクリックしてください
  <a onClick="window.checker.onClick()">
    <img id="image" src="bt_img_square_go.png"/></a>
</body>
</html>


(プロジェクトの構成)



3.「 WebJavaScriptIF 」 を書き換え
package com.proto.webjavascriptif;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
//import android.view.Window;

public class WebJavaScriptIF extends Activity {

    // ハンドラー
    private Handler handler;
    // Webビュー
    private WebView webView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        // ウィンドウタイトルの非表示
        // requestWindowFeature(Window.FEATURE_NO_TITLE);
        
        // setContentView(R.layout.main);書き換え

        // ハンドラーの生成
        handler=new Handler();    
        
        // Webビューの生成
        webView=new WebView(this);       
        WebSettings settings=webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setSaveFormData(false);
        settings.setSavePassword(false);
        settings.setSupportZoom(false);
        webView.setWebChromeClient(new ChromeClient());
        webView.addJavascriptInterface(new JSInterface(),"checker");
        webView.loadUrl("file:///android_asset/checker.html");
        setContentView(webView); 

    }

    // JavaScriptインタフェース
    public final class JSInterface {

        // コンストラクタ
        public JSInterface() {
        }

        // クリックイベントの処理
        public void onClick() {
            handler.post(new Runnable() {
                public void run() {
                    webView.loadUrl("javascript:changeImage()");
                }
            });
        }

    }

    // クロームクライアント
    public final class ChromeClient extends WebChromeClient {

        @Override
        // アラートイベントの処理
        public boolean onJsAlert(
                       WebView view,String url,String message,JsResult result) {
            android.util.Log.e("",message);
            result.confirm();
            return true;
        }

    }

}


・機能の説明
android.os.Handler のHandlerクラスの生成

public Handler ()
android.webkit.WebView のWebViewクラスの生成、指定

public WebView (Context context)

// JavaScriptの処理実装(クロムハンドラ)
public void setWebChromeClient (WebChromeClient client)

// JavaScriptのバインド(クJavaScriptのインスタンス,公開名)
public void addJavascriptInterface (Object obj, String interfaceName)

// JavaScriptのURL(URL)
public void loadUrl (String url)
android.webkit.WebSettings のWebSettingsクラスの生成、指定
(WebViewのコンテンツの設定管理)

// JavaScriptの実行許可(true:可,false:不可)
public synchronized void setJavaScriptEnabled (boolean flag)

// フォームデータの保存指定(true:保存,false:不要)
public void setSaveFormData (boolean save)

// パスワードの保存指定(true:保存,false:不要)
public void setSavePassword (boolean save)

// ズームのサポート有無(true:有,false:無)
public void setSupportZoom (boolean support)
android.app.Activity のActivityクラスの指定

// アクティビティのビューに配置(ビュー)
public void setContentView (View view)
android.os.Handler のHandlerクラスの生成

// クリックイベントの処理
public final boolean post (Runnable r)


4.プロジェクトの実行(実行構成の作成は、「プロジェクトの新規作成」を参照)
1)実行(R) → 実行(R) 実行のイメージはここから!

Copyright (C) 2010 プログラミングのテクニックをあなたに!!(リトル・ヘルパー) All Rights Reserved.