Flex、AIR、Java、Androidなど

9月4日 2009

【Android】Photo Gallery Plusを公開します。Intentも。

Posted by: tachibana In: Ajax| Android| プログラミング

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)
        {
            case YOUR_REQUEST_CODE:
                if(resultCode == RESULT_OK)
                {
                    Uri uri = data.getData();
                    InputStream is;
                    try {
                        is = getContentResolver().openInputStream(uri);
                        Bitmap bmp = BitmapFactory.decodeStream(is);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                }
                break;
        }
    }

切り抜き用Extraを付けた時は処理を委譲しますので受け取り方が変わります。下記の通り。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != RESULT_OK) {
            return;
        }
        switch (requestCode) {
            case YOUR_REQUEST_CODE: {
                final Bundle extras = data.getExtras();
                if (extras != null) {
                    Bitmap photo = extras.getParcelable("data");
                }
                break;
            }
        }
    }

で、あとはお好きなようにしてください。

本来はもうすぐ発売になるAndroidを乗せたSmartQ5用のフォトアルバムを作ろうと思って始めたのでそちらの実装が済むまでマーケットには上げませんので興味のある方は以下のリンクからダウンロードしてみてください。

FlickrPhotoPicker.apk

また、Photo Gallery Plusから画像を引っ張るアプリのサンプルをアップしておきますのでもし興味のある方は見てみて下さい。Photo Gallery Plusとサンプルアプリがあれば雰囲気は掴んでもらえるかと思います。

PullImageSample.zip

しかしこのアプリ、はてなフォトライフとかにも対応して欲しいとか言われそうだなあ。きりがないし他にも作りたいのがあるのでそちらに移りたいのだけれど。サーバーはGAEなので大サイズの画像はダウンロードさせたくないし。

どうしようか。

以下、スクリーンショット貼っておきます。

devices

EasyFreeAds Blog News Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google Yahoo Buzz StumbleUpon

No Responses to "【Android】Photo Gallery Plusを公開します。Intentも。"

Comments are closed.

Categories

 

2017年12月
« 4月    
 123
45678910
11121314151617
18192021222324
25262728293031

About

Author: tachibana

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

Alternative content here