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系かな?