Bagaimana cara menampilkan folder tertentu di Android Gallery3D (cooliris)?

Saya menggunakan Gallery3D (froyo-stable)

Saya mencoba membuat aplikasi kecil yang hanya menampilkan gambar dari folder tertentu dalam tampilan galeri.

Uri targetUri = Media.EXTERNAL_CONTENT_URI;
String folderPath = Environment.getExternalStorageDirectory().toString() + "/DCIM/";
int folderBucketId = folderPath.toLowerCase().hashCode();
targetUri = targetUri.buildUpon().appendQueryParameter("bucketId", String.valueOf(folderBucketId)).build();

In initializeDataSource()

// Creating the DataSource objects.
final LocalDataSource localDataSource = new LocalDataSource(Gallery.this, targetUri.toString(), false);

Tapi saya punya kesalahan

"Error finding album " + bucketId);

In CacheService.loadMediaSets.:

 Log.e(TAG, "Error finding album " + bucketId);

Bagaimana cara memperbaikinya? Terima kasih


person Nam Vu    schedule 13.03.2013    source sumber
comment
Anda ingin jalur folder tertentu dan mengambil gambar dari folder itu??   -  person Raghunandan    schedule 23.03.2013
comment
ya, menampilkan semua gambar hanya dari satu folder   -  person Nam Vu    schedule 23.03.2013
comment
saya tidak tahu tentang galeri 3d. Saya telah menggunakan carosel 3d menggunakan renderscript. Tetapi apakah Anda memerlukan kode untuk mengekstraksi jalur gambar dari satu folder dengan asumsi folder tersebut hanya memiliki gambar.   -  person Raghunandan    schedule 23.03.2013
comment
dengan asumsi Anda perlu mengekstrak jalur file di bawah folder, Anda dapat menggunakan kode di bawah ini. Anda juga dapat mempertimbangkan untuk menggunakan carousel 3d menggunakan renderscript   -  person Raghunandan    schedule 24.03.2013
comment
Raghunandan: terima kasih atas komentar anda, tapi yang saya inginkan adalah jawaban seperti @Joe   -  person Nam Vu    schedule 24.03.2013


Jawaban (2)


Masalah "Kesalahan menemukan album" kemungkinan besar disebabkan oleh fakta bahwa folder "DCIM" tempat Anda mendapatkan bucketId dalam kode Anda tidak memiliki gambar langsung di dalamnya. Anda seharusnya tidak mendapatkan kesalahan jika misalnya Anda menggunakan "/DCIM/Camera" (dengan asumsi ada beberapa gambar di sana).

Namun, jika saya memahami dengan benar apa yang Anda inginkan, saya yakin ada modifikasi tambahan yang perlu Anda lakukan pada kode Gallery3D agar menampilkan folder tertentu saat diluncurkan jika Anda mengikuti rute ini (karena kode tersebut tidak dirancang untuk digunakan seperti itu).

Daripada menggunakan kode di atas, saya yakin Anda dapat mencapai apa yang Anda inginkan dengan lebih mudah dengan menetapkan maksud tertentu di onCreate():

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setIntentToSpecificFolder();

    mApp = new App(Gallery.this);
    // :
    // the rest of onCreate() code
    // :
    Log.i(TAG, "onCreate");
}

private void setIntentToSpecificFolder() {
    String folderPath = Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera";
    int folderBucketId = folderPath.toLowerCase().hashCode();
    Uri targetUri = Media.EXTERNAL_CONTENT_URI.buildUpon().appendQueryParameter("bucketId", String.valueOf(folderBucketId)).build();

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(targetUri, "vnd.android.cursor.dir/image");
    setIntent(intent);
}

Pada dasarnya apa yang kita lakukan di sini adalah memanfaatkan penanganan ACTION_VIEW maksud aplikasi ketika aplikasi tersebut dilengkapi dengan tipe vnd.android.cursor.dir/image MIME.

person Joe    schedule 24.03.2013
comment
Terima kasih, bagaimana saya bisa menggunakan getContentUri di API level 8 atau semacamnya - person Nam Vu; 24.03.2013
comment
Bisakah saya menggunakan Images.Media.EXTERNAL_CONTENT_URI sebagai pengganti ini? - person Nam Vu; 24.03.2013
comment
Ya, itu juga harusnya berhasil. Saya mengedit jawaban untuk menggunakannya. - person Joe; 24.03.2013
comment
Solusi ini berfungsi baik untuk menampilkan album saat menggunakan aplikasi Galeri Android, tetapi membuat aplikasi Foto Google mogok. Apakah ada sesuatu yang bisa dilakukan agar keduanya berhasil? - person Hostile; 16.08.2014

Dengan asumsi Anda perlu menemukan jalur file di bawah folder.

    private String[] mFileStrings;
private File[] listFile;

public void getFromSdcard()
{
    File file=  new File(android.os.Environment.getExternalStorageDirectory(),"Your Folder Name");

        if (file.isDirectory())
        {
            listFile = file.listFiles();
            mFileStrings = new String[listFile.length];

            for (int i = 0; i < listFile.length; i++)
            {
                mFileStrings[i] = listFile[i].getAbsolutePath();
                System.out.println("...................................."+mFileStrings[i]);
            }
        }
}

Di ponsel saya, memori internal saya bernama sdcard0. Jadi untuk memastikan Anda mendapatkan jalur yang benar Anda dapat menggunakan kode di bawah ini.

 String externalpath = new String();
 String internalpath = new String();

public  void getExternalMounts() {
Runtime runtime = Runtime.getRuntime();
try
{
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;

BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
    if (line.contains("secure")) continue;
    if (line.contains("asec")) continue;

    if (line.contains("fat")) {//external card
        String columns[] = line.split(" ");
        if (columns != null && columns.length > 1) {
            externalpath = externalpath.concat("*" + columns[1] + "\n");
        }
} 
        else if (line.contains("fuse")) {//internal storage
        String columns[] = line.split(" ");
        if (columns != null && columns.length > 1) {
            internalpath = internalpath.concat(columns[1] + "\n");
        }
    }
}
}
catch(Exception e)
{
    e.printStackTrace();
}
 System.out.println("Path  of sd card external............"+externalpath);
 System.out.println("Path  of internal memory............"+internalpath);
}

Sebuah alternatif:

Anda juga dapat menggunakan carousel 3d untuk menampilkan gambar menggunakan renderscript sebagai alternatif.

http://code.google.com/p/android-ui-utils/downloads/detail?name=CarouselExample.zip.

Cuplikan yang dihasilkan. Korsel 3d diuji pada Jelly Bean.

masukkan deskripsi gambar di sini

person Raghunandan    schedule 24.03.2013