有名なファイルマネージャ『アストロビューア』で画像ファイル名をクリックしたときのあの動作です。
ところがこういったサンプルがありそうでなかなか見つからず(調べ方が悪いのか需要が無いのか)おかげで3日くらい苦しみましたが、アストロビューアのLogCatを眺めていたところ解決に至りました。
ちなみに日本Androidの会メーリングリストで同じ悩みを持っている人が居て(未解決でしたが)、そのやりとりがヒントになりました。
前置きが長くなりましたが、以下がサンプルです(一部抜粋)
String filename = "SDカードのファイルパス"; //コンテンツプロバイダのURI取得 Cursor c = getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.ImageColumns.DATA + " = ?", new String[]{filename}, null); c.moveToFirst(); String contentname = "content://media/external/images/media/" + c.getInt(c.getColumnIndex(MediaStore.MediaColumns._ID)); Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse(contentname)); startActivity(intent);
3-5行でファイルパスからコンテンツプロバイダのURIを取得しています。コンテンツプロバイダに登録されていないファイルの場合nullが返されるので例外処理を書いた方がいいかもしれません。
自前アプリで作成・保存した、あるいはダウンロードした等のケースではコンテンツプロバイダに登録されてないので、MediaScannerConnection を使ってコンテンツプロバイダに登録させる処理が必要になります。
詳細は以下のURLを参照しください。
参考URL
MediaScannerConnectionを使って画像をギャラリーに反映させる http://techbooster.jpn.org/andriod/multimedia/5341/
contentスキーマとfileスキーマの相互変換 http://yagni.jp/android/interconversion_between_file_and_content
Android URI
http://ee72078.moo.jp/chinsan/pc/MobileApp/index.php?Android%20URI
0 件のコメント:
コメントを投稿