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するようにしたらうまくいきました。