2009/07/25

Androidアプリ: 「クイズ研」リリースしました

Androidアプリ第4弾として、「クイズ研」アプリをリリースしました。


クイズのデータは本家「クイズ研」のサイトからダウンロードしています。今までリリースしたお天気アプリは、Webページを解析して勝手に画像データを取得していましたが、今回はクイズ研にデータ取得用のWeb APIを実験的に用意してもらいました。

どうしてそんな事ができたかというと、クイズ研を運営しているのが大学の研究室時代の同期だからなんです。

先日、Google Developer Day 2009に参加した際、会場で偶然10年ぶりに彼と再会しました。それ以来、Twitterでお互いFollowしてたんですが、GDDフォンをもらった事 がきっかけで自分が最近Androidアプリを作っている事を知った彼が、「試しに作ってみてよー」と開発の依頼をしてきたというわけです。

まだクイズに答えるだけの基本的な機能しかないですが、これから少しずつ追加していきたいと思ってます。

Androidアプリで画像が正しく表示されない?

リリースしたAndroidお天気アプリ3兄弟のユーザーの方から、「Wi-Fi経由だと正しく画像が表示されるんですが、3G経由だと文字が表示されません」との報告メールが来た。(以下の画像は確認のためにユーザーの方に送ってもらいました)

通常の画面表示(Wi-Fi経由)
確かに、3G経由だと文字が消えちゃってます

自分が開発に使っているのはGoogle Developer Day 2009でもらったGDDフォンで、SIMカードを挿していないので、3G経由のデバッグはできません。3G経由だとダウンロードに時間がかかって何か問題があるんだろうか?といろいろ調べてみても原因分からず。

1日経って同じユーザーの方から、「原因が分かりました。mopera UのWeb圧縮が原因でした」とのメールが来る。

おっと、mopera Uにそんな機能があるとは知りませんでした。
解決して一安心。

2009/07/13

Androidアプリ: 「日本のお天気レーダー」リリースしました

Androidお天気アプリ第3弾として、「日本のお天気レーダー」アプリをリリースしました。
国土交通省の防災情報提供センターのWebサイトから画像を取得しています。
東京アメッシュアプリと同様、シークバーを使って過去3時間分のデータをグリグリ表示可能です。メニューから表示する地域を選択することも可能です。

これで普段PCで見ているお天気関係のサイトを、ブラウザを使わずにAndroid携帯で確認できるようになりました。やっぱりブラウザよりも表示が高速で快適快適。

JavaScriptでウィジェット作る方が簡単だしコード量も少なくて済むけど、ブラウザ起動して表示するとなると、今の携帯のスペックではどうしても動作が遅い。サクサク表示できるようにするためには、今のところはネイティブアプリをJavaで書いてしまう方が良さそうです。

相変わらずズーム機能に対応できてませんが、そのうち対応しようと思います。iPhoneと違ってAndroidでは2本指で画面を拡大・縮小させる「ピンチ」動作がサポートされていないので、どういうUIが使いやすいのか、もうちょっと考えてみます。

2009/07/12

Androidアプリ: 東京アメッシュをリリースしました

Androidお天気アプリ第2弾として、「東京アメッシュ」の画像をブラウザを使わずに表示するアプリをリリースしました。
東京と下水道局が運営している「東京アメッシュ」から画像を取得して表示しています。(ここ数日雨が降ってないので雨が降った場合の画面をキャプチャできてません。。。)
指でドラッグすると表示する部分を変更することが可能です。画面下のシークバーで、過去2時間分の10分ごとのデータを表示することも可能です。

過去データ表示機能の実装にはいろいろと悩みました。はじめ、毎回サーバーにアクセスするのは効率が悪いだろうと、一度ダウンロードした画像をBitmapでキャッシュしてみたのですが、メモリが足りずに頻繁に落ちてしまいました。

そこで、Bitmapではなく、ダウンロードしたBitstreamをキャッシュして、表示の度にBitmapにデコードしてみたのですが、Bitstreamが格納されているInputStreamは、一度デコードに使うとポインタが進んでしまい、ポインタの位置を戻すことができない模様。
結局、シークの度に毎回サーバーからダウンロード&デコードする実装に落ち着きました。decodeByteArrayを使うようにすれば、データをキャッシュしつつ効率良く表示できるのかなぁ。

全体表示にも対応しようとしたのですが、縦型表示時に横長の画像を全体表示すると空白だらけになって見づらいので、とりあえず実装は見送りました。

それにしても、アプリの名前を「東京アメッシュ」ってそのままなのは、やっぱりまずいかなぁ。とは言え、他にいい名前が思いつかないのでそのまま使わせてもらいました。有用な情報の提供、ありがとうございます>東京都下水道局さま

2009/07/08

Android Marketにアプリをリリースしてみた(Tepco Thunder)

もうすぐ日本でもAndroid携帯が発売されるということで、初めて作ったアプリをAndroid Marketにリリースしてみた。
東京電力が提供している雨量・雷 観測情報のページから最新画像を取得して表示するという、とてもシンプルなアプリ。
リリース直後に、「ズーム、凡例の表示に対応してくれればいいな」というコメントが書き込まれたので、とりあえず凡例の表示機能を追加してみた(ただし日本語のみ対応)。そのうち英語でも表示できるようにしてみよう。

それにしても、Tepco Thunderって名前じゃ、何ができるアプリなのか分かりづらいな。でも、一度リリースしてしまうと、途中からアプリの名前を変更できないみたい。

2009/07/06

glEnable(GL10.GL_DEPTH_TEST)が有効にならない

Android向けのOpenGL ESのコードを書いていたときの話。

デプスバッファのテストをしてみようと、glEnable(GL10.GL_DEPTH_TEST)を呼んでみたけどなぜか有効にならない。

あれこれ調べてみると、setEGLConfigChooser(false)を呼んでしまっていたのが原因で、デプスバッファが生成されていなかった。

なぜこんなコードを書いてしまったのかというと、Android SDKに含まれていた以下のサンプルコード(ApiDemos)をベースに、デプスバッファのテストをしていたからだということが分かった。
ちゃんと理解しないでコードをコピペするとはまるよ。それにしても、setEGLConfigChooser(false)がデプスバッファを無効化するコードだなんて、ちょっと想像つかなかったな。。。