ラベル javaScript の投稿を表示しています。 すべての投稿を表示
ラベル javaScript の投稿を表示しています。 すべての投稿を表示

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

2013年10月11日金曜日

android開発

10月から会社復帰し、部署も変わったのですが
さっそく仕事もらいました。
javaとobjective-c使いになって!


...


ワクテカが止まらない~。

というわけでまずはjavaから手を付けました。


この2週間でとりあえず
HTML5+javaScript+javaネイティブアプリ
の開発がひと段落しました。

C#使いのわたしとしてはjavaは余裕だったのですが、、、

javaScript

こいつが曲者でした。

javaScriptなんてかんたんでしょ?とか思ってた時期が私にも(re



今回は最初の一週間で本の中に乗ってる
HellowWorld系のサンプルプログラム群を一通りつくって、
残りの一週間でHTML5で使えるcanvasを使ったお絵かきソフトをつくりました。

 ここ らへんを見てもらえるとマウスのお絵かきソフトが作れます。
canvasについては こちら を見てもらえるとわかると思います。

このサンプルアプリをスマートデバイス用に動かして、
いろいろアレンジ加えました。


概要みたいなの
タッチしたら画面にお絵かきできる!
描画情報をDBに格納できる!
DBから描画情報を読み込んで画面に表示させる!
DBアクセスはネイティブで!


こんな感じでした。


まずここのサンプルプログラムをまるコピ。
マウスで絵が描ける!ってところまでは余裕でした。


しかし、、、

マウス→タッチ

ここを理解するまで2,3時間かかりましたorz


結果はこう

window.onload = function(){

var area = document.getElementById("HTMLのキャンバスID");
area.addEventListener('touchstart',  動作させるメソッド, false);
area.addEventListener('touchmove', 動作させるメソッド, false);
area.addEventListener('touchend', 動作させるメソッド, false);
};

こいつを追加するだけでタッチリスナーを生成できるみたいです。
なんかいろんなサイト駆けずり回っていっぱい目にしていたはずなのに。。。

とりあえず描画はできたとろころで一日目終了、、、


なかなか先が長そうだ、、、。



続きは次回にでも。

要望なんかあればソースもそのうちうpするかも。
ないかw。