10

たとえば、whatappが行うように、Androidギャラリーの特定のフォルダーからすべての画像を表示するにはどうすればよいですか。MediaScannerConnectionClient を使用しています

File folder = new File("/sdcard/myfolder/");
allFiles = folder.list();
SCAN_PATH=Environment.getExternalStorageDirectory().toString()+"/myfolder/"+allFiles[0];
@Override
public void onScanCompleted(String path, Uri uri) {
    try {
        if (uri != null) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(uri);
            startActivity(intent);

        }
    } finally {
        conn.disconnect();
        conn = null;
    }
}

private void startScan() {
    if (conn != null) {
        conn.disconnect();
    }
    conn = new MediaScannerConnection(this, this);
    conn.connect();
}
    @Override
public void onMediaScannerConnected() {
    conn.scanFile(SCAN_PATH, "image/*");
}

しかし、私はこの時点でエラーが発生しています:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(uri);
    startActivity(intent);

ここで具体的に:

startActivity(intent);

タイプの取得に失敗しました: content://media/external/images/media/267830 インテントを処理するアクティビティが見つかりません

onScanCompleted で、パスと uri パラメーターが null ではありません。

4

5 に答える 5

13

こんにちは、以下のコードを使用できます。お役に立てば幸いです。

package com.example.browsepicture;

import java.io.File;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class BrowsePicture2 extends Activity {
    String SCAN_PATH;
    File[] allFiles ;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_browse_picture);

        File folder = new File(Environment.getExternalStorageDirectory().getPath()+"/aaaa/");
        allFiles = folder.listFiles();

        ((Button) findViewById(R.id.button1))
                .setOnClickListener(new OnClickListener() {
                    public void onClick(View arg0) {
                        new SingleMediaScanner(BrowsePicture2.this, allFiles[0]);
                    }
                });
    }

    public class SingleMediaScanner implements MediaScannerConnectionClient {

        private MediaScannerConnection mMs;
        private File mFile;

        public SingleMediaScanner(Context context, File f) {
            mFile = f;
            mMs = new MediaScannerConnection(context, this);
            mMs.connect();
        }

        public void onMediaScannerConnected() {
            mMs.scanFile(mFile.getAbsolutePath(), null);
        }

        public void onScanCompleted(String path, Uri uri) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(uri);
            startActivity(intent);
            mMs.disconnect();
        }

    }
}
于 2012-11-16T14:56:34.853 に答える
0

@Talhaの回答はうまく機能しますが、画像アプリのオプションを使用して画像を開こうとします。SD カードのフォルダーでギャラリーを更新するだけの場合は、SingleMediaScanner のコードを次のように変更できます。

class SingleMediaScanner implements MediaScannerConnectionClient {

    private MediaScannerConnection mMs;
    private File mFile;

    public SingleMediaScanner(Context context, File f) {
        mFile = f;
        mMs = new MediaScannerConnection(context, this);
        mMs.connect();
    }

    public void onMediaScannerConnected() {
        mMs.scanFile(mFile.getAbsolutePath(), null);
    }

    public void onScanCompleted(String path, Uri uri) {

        mMs.disconnect();
    }

}

ボタンをクリックすると、取得した各ファイルがループされます。

    File folder = new File(Environment.getExternalStorageDirectory().getPath()+"/aaaa/");
    allFiles = folder.listFiles();

そして、それを一度に 1 つずつ SingleMediaScanner に渡します。

私の場合はうまくいきました。

于 2014-07-15T06:04:34.147 に答える