Re: [Android-SDK-Japan:1311] 絶対pathを使ってSDカード内画像を表示する方法

3,217 views
Skip to first unread message

egg

unread,
Jan 28, 2011, 8:24:55 PM1/28/11
to android-...@googlegroups.com
MASAOさん
江川と申します。
((ImageView)findViewById(R.id.imageview)).setImageURI(Uri.parse("file:///sdcard/hoge.jpg"));
などでできます。
ただ、外部ストレージのマウント先は、端末によって異なるとされているので、
/sdcard や /mnt/sdcard
などの直接的な指定はしないようにするべきとされています。
現状、上記のような記述をしているアプリが既に数多くリリースされているので、
現実的に/sdcardのマウントポイントが無くなることはなかなか考えにくいですが、
無くなることもあり得ます。
final ImageView imageview = (ImageView)findViewById(R.id.imageview);
final File f = new File(Environment.getExternalStorageDirectory(), "hoge.jpg");
imageview.setImageURI(Uri.fromFile(f));
こんな感じで書くとマウント先に依存せずにpathを指定出来ますので、上のコードよりよいと思います。

また、外部ストレージに読み書き出来るかどうかは、そのときの端末の状況によって
異なるので、事前にチェックしたいときは
boolean mExternalStorageAvailable = false;
boolean mExternalStorageWriteable = false;
String state = Environment.getExternalStorageState();

if (Environment.MEDIA_MOUNTED.equals(state)) {
// 読み書き可能
mExternalStorageAvailable = mExternalStorageWriteable = true;
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
// 読み込みのみ可能
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
} else {
// 読み書き不可
mExternalStorageAvailable = mExternalStorageWriteable = false;
}
こんなかんじです。
(ここから取りました)
http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

ほかにも、
Intent.ACTION_MEDIA_MOUNTEDや、Intent.ACTION_MEDIA_REMOVEDの
ActionのIntentをBroadcastReceiverで捕まえることで、ストレージの抜き差しを
検知することもできます。

また、Froyo以降は、タイプ(音楽、写真、着信音など)毎に外部ストレージのpathを
区別して管理する概念が導入されているので、Froyo以降を前提としてよいのであれば
そのあたりも確認した方がエレガントに書けると思います。

以上です。


------------------------------------------
EGAWA Takashi

2011/1/29 MASAO <akanep...@gmail.com>:
> 初めまして。お世話になります。
>
> 件名の通りですが、SDカード内の画像を絶対pathによるファイル名指定で
> 表示するシンプルな方法をご教示下さい。
> 画面構成としては、上半分に任意画像表示して、下半分で他のパーツを
> 配置しています。最終的には、上半分の描画領域で読み込み・編集・保存まで
> できるように持っていきたいので、まずは用意した画像が表示できるところまで
> やりたいと思います。よろしくお願いします。
>
> --
> このメールは Google グループのグループ「Android-SDK-Japan」の登録者に送られています。
> このグループに投稿するには、android-...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-sdk-ja...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-sdk-japan?hl=ja からこのグループにアクセスしてください。
>
>

Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
0 new messages