2013年03月11日

【Android】久しぶりにAndroidアプリった。

201302-03でやったキーワード

久しぶりにAndroidアプリった。こんなに真剣にやったのはたぶん1年ぶりぐらい。 ググったら日本語の情報がわんさか出てきたことに感動。 ということで、基本的にはググればわかるので、ここでは今回やったキーワードだけ残しておくメモです。

トグルボタンを使うには?

android.widget.ToggleButton

OnCheckedChangeListener をimplementsして、以下のonCheckedChangedをoverride

// OnCheckedChangeListenerをimplementした時に実装が必要なメソッド
// トグルボタン用
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked){
        //ON
    } else{
        //OFF
    }
}

プリファレンスは?

android.content.SharedPreferences
android.preference.PreferenceActivity

音声認識させるには?

標準ダイアログが出る

android.speech.RecognizerIntent

標準ダイアログを出さない

android.speech.SpeechRecognizer

※以下のパーミッションが必要

   <uses-permission android:name="android.permission.RECORD_AUDIO"/>

※ダイアログは出ないが、ピコっていう音はなる。

一定間隔で処理するには?

java.util.Timer
java.util.TimerTask

ウィジェットを実装するには?

android.appwidget.AppWidgetManager を継承したクラス(ここでWidgetProvider)を作成
onUpdateでServiceを継承したクラス(ここではWidgetService)をstartService

このとき、マニフェストファイルにこんな感じ書いとく

<receiver>
    android:name=".WidgetProvider"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data
        android:name="android.appwidget.provider"
        android:resource="@xml/widget_provider" />
</receiver>
<service android:name=".WidgetService" >
    <intent-filter>
        <action android:name="com.example.myproject.HOGEHOGE"/>
    </intent-filter>
</service>

サービスタグの <action android:name="com.example.myproject.HOGEHOGE"/> は、ウィジェットに対してクリックイベントを取りたいときに必要。 作成中の自分のプロジェクト(myproject)の中で自分でHOGEHOGEを定義しておき、「HOGEHOGEになったら、ある処理をする」という具合に実装する。

画像を繰り返すには?

android:tileMode="repeat"

最後に

上記をキーワードにググれば分かるはず。と自分に言い残してみる。 参考にしたURLをメモってれば良かったけど、まぁいっか。

タグ:android
posted by やし at 12:16 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2013年02月10日

130209に #gdgkobe で #golang の発表させて頂きました。

内容は、Go言語でWebアプリの作り方です。

公式ページの Writing Web Applicationsを分かりやすく解説したつもりです。

posted by やし at 15:40 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2013年01月30日

【Google Maps API v3】情報ウィンドウをクリックした時、何か処理させるには?

はじめに

Google Maps API v3を触っていて、マーカーをクリックしたときに何か処理させる方法は結構書かれているのですが、 情報ウィンドウ(google.maps.InfoWindow())をクリックした時に何か処理させる方法が日本語ではあまり見つけれれなかったので、メモします。

したいこと

ここで一番やりたいことはタイトルどおりですが、下記のプログラムで何をしたいかを書いておくと、

  1. マップのロード時に複数の地点(ここでは4地点)にマーカーを置く
  2. それぞれのマーカーをクリックすると、情報ウィンドウを表示させる
  3. 情報ウィンドウに書かれている文字列をクリックすると、そのクリックした位置の周りがよく見えるようにある程度ズームする

と、こんな感じです。

<!doctype html>
<html lang="ja">
<head>
    <title>jQuery mobile with Google maps - Google maps jQuery plugin</title>
    <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.css" />
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
    <script type="text/javascript" src="http://code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3&sensor=false&language=ja"> </script>
    <script type="text/javascript">

     var cityList = [
        ['福岡',   33.590355,  130.401716, 1],
        ['熊本',   32.8031,    130.707891, 2],
        ['宮崎',   31.907674,  131.420241, 3],
        ['鹿児島',  31.596554,  130.557116, 4]
    ];


    var demoCenter = new google.maps.LatLng(41.062096,141.354376);

    var map;
    function initialize()
    {
        map = new google.maps.Map(document.getElementById('map_canvas'), {
            //fitBoundsで調整するため、zoom,centerはここでは設定しない
            //zoom: 7,
            //center: demoCenter,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });
        addMarkers();
    }

    var boxList = [];
    var bounds = new google.maps.LatLngBounds();

    function addMarkers()
    {
        var marker, i;
        var infowindow = new google.maps.InfoWindow({
            // 情報ウィンドウが表示されるとき、
            // 地図内に表示されるように地図を動かすかどうかを指定する。
            // trueは地図を動かさない。
            disableAutoPan: false
            //指定した位置と先端の位置をピクセル単位でずらす。
            //,pixelOffset: new google.maps.Size(0, 0)
        });

        for (var i = 0; i < cityList.length; i++)
        {
            var latlng = new google.maps.LatLng(cityList[i][1], cityList[i][2]);
            //markerを置く
            marker = new google.maps.Marker({
                position: latlng,
                map: map,
                id: i,
                title: cityList[i][0]
            });

            // 文字列だけをクリック可能にしたかったため"font"要素としている
            // divだと同じ行のラインだと文字が無くてもクリック可能になってしまう
            var boxText = document.createElement("font");
            boxText.id = i;
            //boxText.style.backgroundColor = "red";
            boxText.innerHTML = cityList[i][0];
            boxList.push(boxText);

            // markerをクリックした時の振る舞いを定義
            google.maps.event.addListener(marker, 'click', (function(marker, i) {
                return function() {
                    //情報ウィンドウにコンテキストをセットして表示する
                    infowindow.setContent(boxList[this.id]);
                    infowindow.open(map, marker);
                }
            })(marker, i)); //end add marker listener

            // 情報ウィンドウのコンテキストをクリックしたときの振る舞い
            google.maps.event.addDomListener(boxList[i],'click',(function(marker, i) {
                return function() {
                  //alert('clicked ' + cityList[i][0])
                  var latlng = new google.maps.LatLng(cityList[i][1], cityList[i][2]);
                  var bs = new google.maps.LatLngBounds();

                  // Mapクラス panTo(latLng:LatLng)メソッド
                  // :latLngで指定された経度緯度に地図の中心をスムーズに移動します。
                  map.panTo(latlng);

                  bs.extend(latlng);
                  bs.extend(getOppositePoint(latlng));
                  map.fitBounds(bs);
                  map.setCenter(latlng);
                }
            })(marker, i));

            bounds.extend(latlng);
        } //endfor

        // Mapクラス:fitBounds(bounds:LatLngBounds)
        // :boundsで指定された領域全体を含むように表示範囲を設定します。
        map.fitBounds(bounds);
    }//end function

    // 座標(a,b)を中心とする半径1の(a,b)の対角線上の座標(x,y)を求めるには?(注意:距離ではない)
    // (a,b) (x,y) の距離が1
    // (x - a)^2 + (y - b)^2 = 1
    //さらに対角上の点は
    // x - a = y - b なので
    // 2*(x-a)^2 = 1 ⇛ x - a = 1/sqrt(2)
    // ⇛ x = a + 1/sqrt(2)
    //   y = b + 1/sqrt(2)
    function getOppositePoint(latLng)
    {
        var latlng;
        var sqrt2 = Math.sqrt(2);
        var x = latLng.Ya + Math.sqrt(0.05)/sqrt2;
        var y = latLng.Za + Math.sqrt(0.05)/sqrt2;
        latlng = new google.maps.LatLng(x,y);
        return latlng;
    }

</script>
    </head>
    <body onload="initialize()">
        <div id="basic-map" data-role="page">
            <div data-role="header">
                <h1><a data-ajax="false" href="/">jQuery mobile with Google maps v3</a> examples</h1>
                <a data-rel="back">Back</a>
            </div>
            <div data-role="content">
                <div class="ui-bar-c ui-corner-all ui-shadow" style="padding:1em;">
                    <div id="map_canvas" style="height:700px;"></div>
                </div>
            </div>
        </div>
    </body>
</html>

参考

上記のプログラムは、stackoverflowをめっちゃ参考にしてます。このstackoverflowではInfoBoxの例もあります。InfoBoxとは、情報ウィンドウのように吹き出しタイプではなくて、 単なる四角のテキストボックスのようなものを作れるライブラリです。

タグ:Google Maps API
posted by やし at 23:09 | Comment(0) | Google Maps API | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2013年01月15日

#golang html/template: 構造体メンバにスライスがあるとき、html側でスライスの要素を指定するには?

先に答えを書くと、 indexを使います。

例えば、goファイル内で次のように構造体のメンバにスライスHotelsを定義した場合、

・goファイル

type Body struct {
	PagingInfo PagingInfo `xml:"SimpleHotelSearch>paginginfo"`
	Hotels     []Hotel    `xml:"SimpleHotelSearch>hotel"`
}

htmlファイルでは、次のように記述します。

・htmlファイル

[]Hotelsの0番目の要素は{{index .Hotels 0}}です。 // Hotels[0]と同じ意味です。

参考

text/templateパッケージのFunctions
http://golang.org/pkg/text/template/#hdr-Functions
text/templateパッケージのテストソース(indexで検索)
http://golang.org/src/pkg/text/template/exec_test.go
stackoverflow: golang html/template: how to index a slice element?
http://stackoverflow.com/questions/12701452/golang-html-template-how-to-index-a-slice-element
posted by やし at 20:22 | Comment(0) | golang | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク

2013年01月06日

docomo WiFiの設定内容確認方法

docomo Wi-Fiを使おうと思ってdocomo Wi-FiユーザIDとdocomo Wi-Fiパスワードを確認しよう思って探してたら、分かりにくすぎてイライラしたので、メモった。

spモードメールアプリを起動

メール設定

その他

Wi-Fiオプション利用設定→Wi-Fiメール設定

認証画面で、spモードパスワード(数字4桁)を入力

Wi-Fi設定画面に行くが、ここで一番下にある「<各種設定」をタップする

「spモード各種設定」画面に行くので、「docomo Wi-Fi設定」をタップする

「>確認」をタップ

認証画面で、spモードパスワード(数字4桁)を入力

確認画面で下記の項目を確認することができる

  • docomo Wi-FiユーザID
  • docomo Wi-Fiパスワード
  • SSID
  • WEPキー

dメニューと書いてあったので、dメニューからいこうしたけど、深すぎて余計分からなかったorz

タグ:spモード
posted by やし at 18:04 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする

     このエントリーをはてなブックマークに追加 このエントリーを含むはてなブックマーク
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。