6

MediaScanner に 1 つのディレクトリだけをスキャンさせようとすると問題が発生します。

私のアプリは写真を撮り、それらを sd-card/DCIM/AppPictures/ に保存します。明らかに、写真をギャラリー アプリに表示するには、MediaScanner を呼び出す必要があります。次のコードは私の目的のために機能します:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));

しかし、それはとても無駄に思えます!ファイルの場所が正確にわかっている場合、SD カード全体をスキャンしようとしてリソースを使用したくありません。私も次のことを試しました:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory+"/DCIM/AppPictures/")));

しかし、これでは結果が得られません。誰かがこれを行うための適切な方法を教えてもらえますか?

4

2 に答える 2

1
public static void ScanMyFile(String strFilePath) {
    // Tell the media scanner so it is available to the user.
    MediaScannerConnection.scanFile(null, new String[] { strFilePath }, null, 
            new MediaScannerConnection.OnScanCompletedListener() {
        public void onScanCompleted(String path, Uri uri) {

        }
    });
}
于 2013-11-07T16:07:24.973 に答える
0

私のアプリでは、写真もダウンロードしています。

私の主な活動 (画像のダウンロード) が開始されると、メディアスキャナー接続を開始します。ダウンロードは順次行われます。画像が到着したら、ファイル名を文字列 (以下の currentFile という名前) に保存し、メディア スキャナーを「接続」します。

public class SomeActivity 
          extends Activity implements MediaScannerConnectionClient {

    ....

    protected MediaScannerConnection mMs;

    ....

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
        ....
        mMs = new MediaScannerConnection(this, this);
        ....
    }

    @Override
    public void onMediaScannerConnected() {
        mMs.scanFile(currentFile, null);
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        mMs.disconnect();
    }


}

スキャンを開始するには、次のようにします。

currentFile = "/mnt/sdcard/someLocationToScan/somefile.jpg";
mMs.connect();
于 2013-03-29T16:58:00.073 に答える