SDカヌドから画像の読蟌ができたせん。

閲芧: 953 回
最初の未読メッセヌゞにスキップ

あゆた

未読、
2010/09/06 2:13:462010/09/06
To: 日本Androidの䌚
こんにちは。あゆたず申したす。

珟圚、カメラを䜿っお画像をSDカヌドに保存し、その保存した画像を保存時に付けた名前をもずに怜玢し、画面に衚瀺させる、ずいうアプリを䜜成しおいた
す。

単玔なものだず思っおいたのですが、SDカヌドからの呌び出しに苊戊しおいたす。

SDカヌドには、
FileOutputStream fos = null;
File dir = new File("/sdcard/cameraEx/");
dir.createNewFile();
fos = new FileOutputStream(dir + fileName);
fos.write(w);

ずいう感じで保存しおいたす。
保存自䜓はちゃんずされおいたす。

そしお、その埌に、MediaScannerConnectionClientを継承させたクラス内の
onMediaScannerConnected() メ゜ッド内で
mConnection.scanFile(mPath, mMimeType);
ずしおいるのですが、ここから
onScanCompleted(String path, Uri uri)
に飛びたせん。

私ずしおは、ここで
btm = BitmapFactory.decodeFile(path);
ずいう颚に画像を取り出したいず思っおいたのですが、党然思い通りにいきたせん。
パスが間違っおいるのか、そもそもMediaScannerConnectionを䜿おうずしおいるのが悪いのか。。。

アドバむスを頂けないでしょうか。

よろしくお願いいたしたす。

Tomoki Iwai

未読、
2010/09/08 4:43:372010/09/08
To: 日本Androidの䌚
こんにちは、岩井ず申したす。


onScanCompleted()が呌び出されないずいうのは謎ですが、scanFile(Filename, MimeType)を呌ぶ際に
 「拡匵子がいい感じ」
 「MimeTypeをちゃんず指定する」
のいずれかを満たしおいないずスキャンに倱敗するっぜいですね。


私の環境(Android1.6+゚ミュレヌタ and Android2.1+HTC Desire)では、䞋蚘のコヌドで動䜜したした。


public class アクティビティ {

public void 適圓なむベントリスナ() {
MediaScannerConnection scanner = new
MediaScannerConnection(getApplicationContext(), client);

MyClient client = new MyClient();
client.setScanner(scanner);

scanner.connect();
}

class MyClient implements
MediaScannerConnection.MediaScannerConnectionClient {
private MediaScannerConnection _scanner = null;
public void setScanner(MediaScannerConnection scanner)
{ _scanner = scanner; }

public void onMediaScannerConnected() { _scanner.scanFile("/
sdcard/sample.png", null); }

public void onScanCompleted(String path, Uri uri) {
_scanner.disconnect();

// pathは、"/sdcard/sample.png"っおな感じ
// uriは、"content://media/external/images/media/117"っおな感じ

try { Bitmap bitmap =
MediaStore.Images.Media.getBitmap(getContentResolver(), uri); } catch
(Exception ignore) { }
}
}
}


たた、名前で画像を怜玢しお衚瀺するずいった芁件を満たすには、ファむルスキャン完了むベントで駆動させるより
ContentResolverを䜿甚しおメディアのデヌタベヌスに問い合わせたほうがカッコむむ気がしたす。
以䞋に、サンプルを曞いおみたした


// ファむル名に"sample"を含む画像ファむルを怜玢し、ファむル名ずパスを取埗する
Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[] { MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATA },
MediaStore.Images.Media.DISPLAY_NAME + " like ?",
new String[] { "%sample%" },
null);

while (cursor.moveToNext())
{
String filename =
cursor.getString( cursor.getColumnIndex( MediaStore.Images.Media.DISPLAY_NAME ) );
String filepath =
cursor.getString( cursor.getColumnIndex( MediaStore.Images.Media.DATA ) );

Bitmap bitmap = BitmapFactory.decodeFile(filepath);
// などなど
}


以䞋、蛇足です。
MediaScannerなんおのは初めお芋たので、調べた範囲でたずめおみたした。


(1)Media Scanner Serviceずは

端末の内郚/倖郚ストレヌゞに栌玍されおいる各皮メディアファむルの情報を集玄しデヌタベヌス化しおおくサヌビスである。たぶん 


(2)MediaScannerConnectionずは

新たに䜜成orダりンロヌドしたメディアファむルを、「MediaScannerサヌビス」に登録する手段を提䟛するためのクラスである。

(原文:MediaScannerConnection provides a way for applications to pass a
newly created or downloaded media file to the media scanner service.)


(3)MediaScannerConnectionClientずは

MediaScannerConnectionを利甚するアプリケヌションに察し、䞋蚘のタむミングでその旚を通知するためのむンタヌフェヌスを定矩し
たクラスである。

 ・「MediaScannerサヌビス」ぞの接続ができた
 ・ファむルのスキャンニングが完了した

(原文:An interface for notifying clients of MediaScannerConnection when
a connection to the MediaScanner service has been established and when
the scanning of a file has completed.)



参考
http://code.google.com/p/i-jetty/source/browse/trunk/webapps/console/src/main/java/org/mortbay/ijetty/console/MediaBrowserServlet.java?spec=svn360&r=360

http://d.hatena.ne.jp/umezo/20100608/1276014215

http://android-dev.g.hatena.ne.jp/sakira09/

あゆた

未読、
2010/09/12 8:51:082010/09/12
To: 日本Androidの䌚
岩井様

倧倉䞁寧なご指導ありがずうございたす。

onScanCompletedメ゜ッド内での凊理は諊めおいたしたが、おかげで䜿えそうな気がしおきたした

実際に取り掛かっおみようず思いたす。

ありがずうございたす。
> 参考http://code.google.com/p/i-jetty/source/browse/trunk/webapps/console/...
> > よろしくお願いいたしたす。- 匕甚テキストを衚瀺しない -
>
> - 匕甚テキストを衚瀺 -
党員に返信
投皿者に返信
転送
新着メヌル 0 件