つぶやき文庫がA3に最終ノミネート

http://itpro.nikkeibp.co.jp/android/aaa2010spring/nominate.html

ありがたい話です。
ルック&フィール賞候補ということですが、さすがにゴルフるずとPostPetと勝負するつもりはなく。
授賞式に招待されただけでもありがたいものです。

6/24の様子などは別途ご報告。
あと、つぶやき文庫自体にちょっとしたバグがあったんで、それもおいおい修正しなくては。

つぶやき文庫

Android Application Award 2010 Springのために、作成してまだ公開はしていないアプリケーションの紹介です。

つぶやき文庫は、#twnovelハッシュタグで書かれたTwitter小説を文庫本のように読むことのできるアプリケーションです。

ページをめくる(タッチする)と文章が壊れたようになって遷移します。可能なオペレーションはこれだけ。(横方向に持つとレイアウトは変わりますが)

起動すると、#twnovelで書かれた投稿を読んで表示します。また、(簡易)形態素解析により、文章に合わせて画像を「フォト蔵」より検索して表示します。

フォト蔵を選択したのには訳があって、普通のFrickrやGoogle画像検索だと検索対象の単語に対する画像の精度があまり良くないんです。で、幾つか探した中で、APIを持っていて画像に対する適度な長さの文章(これを検索対象にできる)がある、という条件にマッチしたのがフォト蔵というわけです。

フォト蔵から持ってくる画像はCCで再利用可なもののみとなっていますので、ライセンス的にも問題ないはず。

使ってみると、自分で作ったにしても結構はまります。なかなか良い出来です。
が、審査によっては、あっさり一回戦落ちだろうなあ、と思ったり。

追記: AAAの募集要項では公開アプリも対象となっているのですが、さすがに陽の目を見ない可能性が高いので公開することにします。

569×320の解像度と戦う

XPERIAであるアプリケーションの開発をしているときに、解像度を取ろうとするとどうしても569×320が取れてしまう不具合が。

Webをいろいろ探ってもよくわからず、ヒントとしては、

You may be missing the <uses-screens> element in your manifest, and so
you may be in a compatibility mode, with Android scaling everything
automatically.

http://groups.google.co.jp/group/android-developers/browse_thread/thread/56292b2f943a4674

と、

targetSDKを4に設定することで、解像度の問題はクリアできました。

http://groups.google.com/group/android-group-japan/browse_thread/thread/5fad044c9b0429dd?pli=1

そこで、コンパイル設定のターゲットを1.6にしたのだが状況は変わらず。

もしかして、と思って、マニフェストに

<uses-sdk android:minSdkVersion=”4″ />

を入れたら出来ました。画面のデザインも大きく狂って、いろいろやり直しにはなるんですが。

Androidで、縦向きと横向きでレイアウトを変える

Androidは横向きにした際には縦方向と横方向を逆転させる。その際、横向きと縦向きレイアウトを変えたい場合が良くある。Androidではそれの標準的な解決方法として縦向きレイアウトと横向きレイアウトの定義ファイルを別々に分ける事ができる。具体的にはres/layout-land/main.xmlというファイルを横向きレイアウトファイルとして定義すれば良い。

だそうです。引用は下記より。

http://www.次世代創造機構.jp/android/androidLecture/GuiTutorial/GuiTutorial.html

Androidアプリケーション Late Mirror

Late Mirror

Late Mirrorは、Android上で動く「遅れる鏡」を模したアプリケーションです。
朝、なかなか鏡では見ることのできな貴方の凛々しい背中や頭頂部のチェックをするために使えます。
また、世知辛い世の中を(約3秒)遅れて覗いてみれば、何か大きな気付きがあるかもしれません。
(決してアプリの動作が遅いわけではないですよ!わざわざ遅らせてます!)

  • カメラから撮影された画像を、約3秒遅れて表示します。
  • Nexus Oneでのみ動作を確認しています。
  • このアプリはクックパッドさん主催の「開発コンテスト24」向けに作成しています。
  • コンテストで入賞しなかった場合でも、綺麗に作り直して公開します。たぶん。
  • アイコンだけやたら凝っているのは、そういう戦略だからです。
  • ついでにAndroid Application Award 2010-11 Winterにも出しちゃいました!


追記:
4/28にLate Mirror BETAを公開しました。
頑張ったのですが、XPERIAでは動かないので申し訳ないですがAndroid 2.1以上で設定しています。
HTC Desireをお持ちの方は、動作確認(といってもちゃんと遅れて見えるか、くらいしかないのですが)をいただけると幸いです。

signal 11 (SIGSEGV), fault addr 98054b41

Android1.6のカメラAPIにはバグがある模様で、Xperiaでアプリからオートフォーカスを行うと3回くらいで落ちる。これはAndroid2.0でFIXされた問題らしい。
http://groups.google.co.jp/group/android-developers/browse_thread/thread/0e67abdc05fe878f/c913410296cd37fd
なんとかFIXできないか確認中。

追記:

We have fixed it in 2.0, and we are publishing a patch for manufacturers
that use 1.6. It will be up to individual manufacturers/carriers to decide
whether to make that patch available to existing users. For developers,
using setOneShotPreviewCallback will reduce the odds of the crash.

The bug/fix is as below.
diff –git a/core/jni/android_hardware_Camera.cpp
b/core/jni/android_hardware_Camera.cpp
index 9053468..d9b6e7b 100644
— a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -112,7 +112,7 @@ void JNICameraContext::notify(int32_t msgType, int32_t
ext1, int32_t ext2)
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
env->CallStaticVoidMethod(mCameraJClass, fields.post_event,
–            mCameraJObjectWeak, msgType, ext1, ext2);
+            mCameraJObjectWeak, msgType, ext1, ext2, NULL);
}

ということで、JNIでコンパイルしなおしたものを使うか、setOneShotPreviewCallbackを使うか。
どちらも現実的ではないなあ。

更に追記(ほぼ解決)

結局はCamera.setPreviewCallbackを setOneShotPreviewCallbackに差し替えて対応しました。
他のARソフトもそうしているみたい。なぜかそれで他のViewのonDrawが呼ばれなくなった(当たり前なのかな?)ので、invalidateするようにしたらうまくいきました。