2013年10月29日火曜日

JavaScript→Java→JavaScriptの連携


android開発前回まで

前回はJavaScriptでタッチイベント取得する方法を模索でした。


今回はJavaScript→Java→JavaScriptの連携を載せます。


JavaでAndroid開発の環境を作成する方法はほかサイトをあさってください。

比較的すぐ見つかるはずです。



JavaからHTMLを呼び出すには以下を実装します。


Java→HTML
Javaのres/layoutないにあるレイアウトにWebViewを実装したレイアウトファイルを作成。

そのレイアウトファイルに関連づいたソース内に以下を記載。

// クラス変数にでも記載する。
WebView myWebView;


// レイアウトで指定したWebViewのIDを指定する。
myWebView = (WebView) findViewById(R.id.webView1);

// JAVAスクリプトを有効化
myWebView.getSettings().setJavaScriptEnabled(true);

// リンクをタップしたときに標準ブラウザを起動させない
myWebView.setWebViewClient(new WebViewClient());

// Javaスクリプトからデータを受け取る用
myWebView.addJavascriptInterface(new JavascriptInterface(), "Android");

// ページ表示
myWebView.loadUrl("file:///android_asset/draw.html");
// ↑これでassetsフォルダにdraw.htmlを置けば起動する。


addJavascriptInterfaceはJavaScriptとの連携に必要です。


JavaScript→Java

Javaでは以下の定義を記述します。

private class JavascriptInterface {
public void メソッド名(final String x) {
// 実装コード
}
}

JavaScriptの呼び出し場所に以下の記述をします。
Android.メソッド名(x);


これでJavaScriptからネイティブコードを読み出せます。

Java→JavaScript

Javaの呼び出し場所に以下の記述をします。
myWebView.loadUrl("javascript:関数名("引数データ")");


JavaScriptでは以下の定義を記述します。
var 関数名 = function(引数データ){
// 実装コード
}

これでネイティブコードからJavaScriptを読み出せます。


以上が一般的なJavaScript→Java→JavaScriptの連携になります。
(セキュリティ的な関係でJava→JavaScriptは結構ちゃんと実装したほうがいいらしいです。
というか使わないほうがいい?)



JavaScriptからJavaを呼び出すときはJavascriptInterfaceのクラスを呼び出してしまっているので

親画面のクラス変数を使いたい場合はハンドラーを使って親画面処理として走らせてやります。

private class JavascriptInterface {
public void メソッド名(final String x) {
// ハンドラーを使ってDrawTest画面の処理として実行させる
handler.post(new Runnable() {
@Override
public void run() {
//実装コード
}
});
}
}



まだまだ勉強中ですが今はこんな感じで

ハイブリッド型アプリを作成中です。


次回は。。。DB系かな?

0 件のコメント:

コメントを投稿