Flex、AIR、Java、Androidなど

Archive for 9月 4th, 2009

Androidに標準でインストールされているギャラリーは画像を見るだけでなく、他のアプリケーションが画像を必要とする時にIntentにより起動され、画像を渡したり、Intentに仕込まれたパラメータによって縦横比やサイズを指定して切り抜いた後、返したりできます。
そこでAndroidならではと思いつき、SDカードに登録されている画像と同じようにFlickrにアップロードされている画像を他のアプリに渡したり、切り抜きが必要な場合には切り抜き用ウィンドウを利用して加工した後返したりできるアプリを作りました。
とりあえず電話帳に画像を登録する時や、Gmailに添付ファイルとして画像を選択するような時に使えるかと思います。
図解できればいいのですがセンスがないのでやめときます。
要は、
1) Intent.ACTION_GET_CONTENTを横取りして、画像をSDから選ぶかFlickrから選ぶかユーザーに選択させる
2) SDを選ぶと標準のギャラリーに移動。Flickrから選びたいときは検索をかける
3) 検索結果はWebViewに表示。
4) 欲しいのがあればタップすると画像を選択するか、ダウンロードのみ行うか、クリップボードにタイトルやURLをコピーするかなど選べます。ダウンロード完了後は起動されたIntentに仕込まれたパラメータによりそのままのサイズで返すか、縦横比やサイズが指定された場合はそれをもとに画像切り抜きウィンドウを表示。切り抜き完了後、データを返す。
という感じです。
また、GET_CONTENTに反応するだけでなく通常のギャラリー&写真ダウンローダーとしても機能します。
開発者の方へ。
Intentを公開しますのでお好きにご利用ください。ユーザーに画像を選択させ、それを指定したサイズで自分のアプリに引っ張ってくることが可能になります。
起動したい時は、
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setComponent(new ComponentName("biz.stachibana.flickr.picker","biz.stachibana.flickr.picker.InitialActivity"));
が必須です。
切り抜きをしてから返して欲しいときは、上記に加え
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 96);
intent.putExtra("outputY", 96);
intent.putExtra("return-data", true);
こういう感じで。
例外は省きますが、ActivityNotFoundExceptionをキャッチした時はコンポーネントネームを外してAction.GET_CONTENTのみをつけてやれば標準のギャラリーが処理を行うことになります。戻り値の型は合わせてありますのでPhoto Gallery PlusがインストールされていなくてもSDの中からでしたら画像を引っ張れます。
帰ってきた時ですが、切り抜き無しの時は以下の様にして取れます。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(requestCode)
{
[...]

コメントは受け付けていません。

Categories

 

2009年9月
« 8月   10月 »
 123456
78910111213
14151617181920
21222324252627
282930  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here