Как отобразить определенную папку в Android Gallery3D (cooliris)?

Я использую Gallery3D (froyo-stable)

Я пытаюсь создать небольшое приложение, которое отображает только изображения из определенной папки в представлении галереи.

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);

Но у меня ошибка

"Error finding album " + bucketId);

In CacheService.loadMediaSets.:

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

Как я могу это исправить? Спасибо


person Nam Vu    schedule 13.03.2013    source источник
comment
Вы хотите получить путь к определенной папке и получить изображения из этой папки ??   -  person Raghunandan    schedule 23.03.2013
comment
да, отображать все изображения только из одной папки   -  person Nam Vu    schedule 23.03.2013
comment
я не знаю о галерее 3d. Я использовал 3D-карусель с помощью рендерскрипта. Но нужен ли вам код для извлечения путей к изображениям из одной папки, если в этой папке есть только изображения.   -  person Raghunandan    schedule 23.03.2013
comment
если вам нужно извлечь путь к файлам в папке, вы можете использовать код ниже. Вы также можете рассмотреть возможность использования карусели 3d с помощью рендерскрипта.   -  person Raghunandan    schedule 24.03.2013
comment
Рагунандан: спасибо за ваш комментарий, но я хочу что-то вроде ответа @Joe   -  person Nam Vu    schedule 24.03.2013


Ответы (2)


Проблема «Ошибка при поиске альбома», скорее всего, связана с тем, что в папке «DCIM», из которой вы получаете bucketId в своем коде, нет изображений непосредственно в ней. Вы не должны получить ошибку, если, например, вместо этого используете «/DCIM/Camera» (при условии, что там есть какие-то изображения).

Однако, если я правильно понимаю, что вы хотите, я полагаю, что вам необходимо внести дополнительные изменения в код Gallery3D, чтобы он отображал определенную папку при запуске, если вы следуете этому маршруту (поскольку код просто не предназначен для использоваться так).

Вместо того, чтобы использовать приведенный выше код, я считаю, что вы можете легче достичь того, чего хотите, установив намерение для конкретного в 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);
}

По сути, то, что мы здесь делаем, — это использование ACTION_VIEW обработки намерений приложения, когда оно поставляется с vnd.android.cursor.dir/image типом MIME.

person Joe    schedule 24.03.2013
comment
Спасибо, как я могу использовать getContentUri на уровне API 8 или что-то в этом роде? - person Nam Vu; 24.03.2013
comment
Могу ли я вместо этого использовать Images.Media.EXTERNAL_CONTENT_URI? - person Nam Vu; 24.03.2013
comment
Да, тоже должно работать. Я отредактировал ответ, чтобы использовать его вместо этого. - person Joe; 24.03.2013
comment
Это решение отлично подходит для отображения альбома при использовании приложения Android Gallery, но приводит к сбою приложения Google Photos. Можно ли что-то сделать, чтобы это работало на обоих? - person Hostile; 16.08.2014

Предположим, вам нужно найти путь к файлам в папке.

    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]);
            }
        }
}

В моем телефоне моя внутренняя память называлась sdcard0. Поэтому, чтобы убедиться, что вы выбрали правильный путь, вы можете использовать приведенный ниже код.

 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);
}

Альтернатива:

Также вы можете использовать 3D-карусель для отображения изображений с использованием рендерскрипта в качестве альтернативы.

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

Результирующий снимок. Карусель 3d протестирована на Jelly Bean.

введите здесь описание изображения

person Raghunandan    schedule 24.03.2013