2011年4月1日金曜日

とりあえず自分にできること Android停電アプリ

地震から3週間。

とりあえず自分にできることとして、アプリを作った。
すでに輪番停電の状態を検知するアプリはアンドロイドでも出ているけど、それでも自分でつくることに
何か意味が出るような気がしたので作成した。

Androidアプリ 停電観測

ただAPIをたたいているだけなので、全然だけど少しでも今の世の中の役に立てればと思います。

2011年3月31日木曜日

Android MapViewでクリックイベント取得

MapViewをクリックした時に、その場所のジオコードを取得し、そのジオコードを元にいろんなAPIをたたきたい、ということでやってみたが、結構はまったのでいかに記載。

とりあえず最初に以下のようにMapViewのOnClickListenerのEventを取得するようにした。


@Override
 public void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  MapView mapView = (MapView)findViewById(R.id.mapView);
                mapView.setBuiltInZoomControls(true);
                mapView.setOnTouchListener(new OnTouchListener() {
   public boolean onTouch(View v, MotionEvent event) {
    GeoPoint point = mapView.getMapCenter(); // TODO 自動生成されたメソッド・スタブ
    lati = point.getLatitudeE6() / 1E6;
    lon = point.getLongitudeE6() / 1E6;


    // ここでAPIよびだし!!

    mMapController.animateTo(point);
    Log.d(TAG, "click lati=" + lati + " lon=" + lon);
    return false;
   }
  });
しかししかーし、OnTouchイベントは1回しかこない!
ちなみにOnTouchをTrueにしてリターンすると、それ以降の処理を受け付けれなくなった。
また、OnClickListenerでもいけるかな!?と思ったけどEventすら受け付けなかった。

ちなみに画面をタップした時にその場所にアイコンを表示するために、Overlayクラスを実装していた。
うーむ、とあれこれbreakを張って見ているとどうもOverlayクラスにはEventが来ていた。

おおー、じゃこっちでとればいいじゃん、ということでOverlayで取得するように変更!
以下ソース。

public class IconOverlay extends Overlay {
 Bitmap mIcon;
 int mOffsetX;
 int mOffsetY;

 GeoPoint mPoint;

 IconOverlay(Bitmap icon, GeoPoint point){
  mIcon = icon;
  mOffsetX = 0 - icon.getWidth() / 2;
  mOffsetY = 0 - icon.getHeight() / 2;
  mPoint = point;

 }


 @Override
    public boolean onTap(GeoPoint geopoint, MapView mapview) {
     mPoint = geopoint;
        // ここでAPIをよびだし!!!
     return super.onTap(geopoint, mapview);
    }

 @Override
    public void draw(Canvas canvas, MapView mapview, boolean shadow) {
  super.draw(canvas, mapview, shadow);

  if (!shadow){
   Projection projection = mapview.getProjection();
   Point point = new Point();
   projection.toPixels(mPoint, point);
   point.offset(mOffsetX, mOffsetY);

   canvas.drawBitmap(mIcon, point.x, point.y, null);
  }
 }

}

2011年3月30日水曜日

学べるニュース プルトニウム

池上彰の学べるニュースで原子力特集、またやっていたのでまとめよう。

■プルトニウムについて
・プルトニウムは自然界にないもので核分裂の時にできるもの。
・プルトニウムも核分裂を起こす。
・プルトニウムとウランを混合した燃料をMOX燃料という。
・MOX燃料を使用した原子炉をプルサーマル原子炉といい、福島第一原発の3号機はこれ。
・核燃料からプルトニウムを増幅させようとしたものが、高速増殖炉(もんじゅ)である。
・プルトニウムは重いが出すアルファ線は人体影響を及ぼしやすい。

■放射線について
放射線には
・アルファ線
・ガンマ線
・ベータ線
・中性子線
がある。

アルファ線は紙とかも貫通しにくい。
ガンマ線はアルミニウム箔は貫通しにくい。
ベータ線は厚い鉄鋼は貫通しにくい。
中性子線は水やコンクリートを貫通しにくい。

プルトニウムはアルファ線。

2011年3月29日火曜日

Android  MapViewへキー発行

ひさびさMapViewをつかってAndroidアプリを作成しようとおもったら、MapViewが表示されなかった。
理由は認証キーが変わっていたためでした。

念のため以下、認証キーの発行方法。
ただし、デバッグ用と正式版はちがいます!!これ注意しないと、実際にストアに上げた後に
地図が表示されない!っと騒ぐ羽目になっちゃいます。(自分はその口でした・・)

■発行手順(デバッグ用)
①Javaのkeytoolでandroidのフィンガープリントを発行
②①でandroidサイトから発行てもらう。


①Javaのkeytoolでandroidのフィンガープリントを発行
keytoolはJavaのbinに存在しますー。


 cd "C:\Program Files\Java\jdk1.6.0_10\bin"
 keytool -list -alias androiddebugkey -keystore "C:\Documents and Settings\KENZY\.android\debug.keystore" -storepass android -keypass android

 androiddebugkey, 2011/03/25, PrivateKeyEntry,
 証明書のフィンガープリント (MD5): DC:A0:9C:F1:10:xxxx.....


②①でandroidサイトから発行てもらう。

あとは以下にアクセスし、上記の認証情報を入力して同意するとキーがもらえる。

http://code.google.com/intl/ja/android/maps-api-signup.html


■発行手順(androidストアアップ用)
手順はおなじだけど、①のフィンガープリントの発行方法が違います。

フィンガープリント発行する元となるkeystoreをAndroidMarketにアップする際に使用するkeystoreを使えばよいのです。xxxxがkeystore

 keytool -list -keystore xxxx


でOK!!



2011年3月27日日曜日

スクレイピングって

Webサイトから必要な情報を引っ張ってくることをスクレイピング
っていうらしい。

確かに必要な情報を取りたい時に、サイトがAPIを提供していれば
それを使えばいいけど、そういうの提供していないサイトから情報を
取得するのってどうすればいいのかな!?っとちょっと思っててグーぐる
ったらこの単語に引っかかった。

で、調べたらjavascriptで以下のサイトでやっていた。

 http://blog.goo.ne.jp/xmldtp/e/625be225495dcb649161d9a3c09d6816

あとAndroidだとWebViewをつかって!?簡単にできそうなので以下
参考にやってみようかな。

 http://android.g.hatena.ne.jp/keigoi/20100211/1265892976
 http://fromnorth.blogspot.com/2010/02/webview.html

試験結果

昨日の夜、CGーArtsエンジニアのベーシック、エキスパートの自己採点をした。 実は日曜日には回答が出ていたけど、自信がなく採点するのもやめようかと思っていたがタイミング&勢いでやってしまった。 <結果>  ベーシック:85点  エキスパート:72.5点 70点以上で合格なので...