8

私は2つのリストを持っています。それらをAlbumsListとPicturesListと呼びましょう。

  • 1つ目は、フォトアルバムの表紙(その中の画像の1つ)の名前と写真の数を示しています。
  • 2つ目は、選択したアルバムに含まれるすべての画像を表示します。

私はすでにFileクラスを使用してそれを実行しましたが、動作が遅すぎて、ギャラリーからの画像のみが必要な場合にデバイス上のすべての画像を検索します。MediaStoreコンテンツプロバイダーについて読んだことがありますが、使用したことはありません。だから私は2つの質問があります:

  1. MediaStoreクラスを使用して、「フォトアルバム」(写真を含むギャラリー内のフォルダー)、それらのサムネイル、およびそれらの写真の数を見つける方法は?「ギャラリー内のすべての画像のファイルパスとサムネイルを見つける方法」に似ていると思います。
  2. MediaStoreクラスを使用して特定のフォルダ内のすべての画像のファイルパスとサムネイルを取得するにはどうすればよいですか?

編集:MediaStore.Images.Media.DATA列にファイルパスが含まれているようですので、アルバムフォルダーを取得できます。MediaStore.Images.Media.Display_NAMEはファイル名のように見えますが、常に正しいかどうかはわかりません。2番目のクエリを実行せずに、これらの列に加えてサムネイルデータ列を取得できますか?

4

1 に答える 1

14

ここに私が書いたコードがあります:

    Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_ID,
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME };

    Cursor cursor = getContentResolver().query(uri, projection, null, null, null);

    ArrayList<String> ids = new ArrayList<String>();
    mAlbumsList.clear();
    if (cursor != null) {
        while (cursor.moveToNext()) {
            Album album = new Album();

            int columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
            album.id = cursor.getString(columnIndex);

            if (!ids.contains(album.id)) {
                columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
                album.name = cursor.getString(columnIndex);

                columnIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
                album.coverID = cursor.getLong(columnIndex);

                mAlbumsList.add(album);
                ids.add(album.id);
            } else {
                mAlbumsList.get(ids.indexOf(album.id)).count++;
            }
        }
        cursor.close();

それは私のALbumクラスと以前に宣言されたvarを使用しますが、mAlbumsListそれがどのように機能するかを理解するのに十分明確だと思います。多分それは誰かを助けるでしょう。

于 2013-06-16T09:36:33.993 に答える