2010年09月21日

[Android] カメラアプリの起動と終了

カメラアプリを作るときに困ったことのメモです。
通常起動する分には、ネット上のサンプルを見れば何とかなったのですが、
連携起動する際の設定や実装方法が分からず、結構時間がかかってしまいました。
みなさん、こういうときは何処を読むようにしているのでしょう?
英語が読めれば、結構簡単に情報は見つかるのかな?

■起動時
余所のアプリから自分のカメラアプリを起動するために設定する<intent-filter>のアクションがわかりませんでした。
ネット上に転がっているサンプルが、外部のカメラアプリを起動するときに指定するアクションが「MediaStore.ACTION_IMAGE_CAPTURE」だったので、これを指定してみたのですがダメでした。
困ったときはGoogleさんの書いたコードですね。
↓こんな風に書かれていました。

<intent-filter>
<action android:name="android.media.action.IMAGE_CAPTURE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.media.action.STILL_IMAGE_CAMERA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>

とりあえず、このまま指定しました。
連携元のアプリとしては、Twitter(公式アプリ)と、twiccaを使いました。
写真撮影機能を呼びだすと、見事に自分の作成したアプリが選べるようになっていました!
連携起動だけなら、上のIMAGE_CAPTUREのアクションだけで大丈夫っぽいですね。


■終了時
上の記述で余所のアプリから起動してもらうことはできるようになったのですが、
今度は終了時に画像を返す方法がわかりませんでした。
カメラアプリを起動するアプリの処理として、Intentの中のgetExtars()のget("data")としているサンプルが
あったので、put("data", bmp)としてみましたが、Twitterもtwiccaも正しく画像を取得してくれません。
これもGoogleさんのサンプルコードを読むことにしました。

どうやら起動時のパラメータによって、返す方法が異なるようでした。
無指定の場合は、↑で書いたように指定すれば良いようですが、
起動時に「EXTRA_OUTPUT」が指定されていた場合は、ファイル書き出しを行う必要があるみたいです。
書き出し先はEXTRA_OUTPUTで指定されるUriでした。
ContentResolverのopenOutputStream()を使って、UriからOutputStreamを取得して書き出します。
これでうまくいきました。


これらを調べるのは結構面倒だったのですが、他の開発者の方々はどのようにして調べてるんでしょう?
やっぱり英語サイトなのでしょうか。
せめて読めるくらいには英語も勉強しようかなぁ、とちょっと思ったりしました。
posted by t2low at 06:08| Android