2013-03-13 4 views
4

Я использую Gallery3D (froyo-stable)Как я могу отобразить определенную папку в Android Gallery3D (cooliris)?

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

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

В initializeDataSource()

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

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

"Error finding album " + bucketId); 

CacheService.loadMediaSets. В:

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

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

+0

Вы хотите путь к определенной папке и извлекать изображения из этой папки ?? – Raghunandan

+0

да, отображение всех изображений из одной папки –

+1

я не знаю о галерее 3d. Я использовал 3d carosel, используя renderscript. Но вам нужен код для извлечения путей изображения из одной папки, предполагая, что в папке есть только изображения. – Raghunandan

ответ

1

Проблема «Ошибка поиска альбома», скорее всего, связана с тем, что в папке «DCIM», которую вы получаете в своем коде , нет никаких изображений. Вы не должны получать ошибку, если, например, вы используете «/ 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 намерения обработка приложения, когда он поставляется с типом MIME vnd.android.cursor.dir/image.

+0

Спасибо, как я могу использовать getContentUri в уровне API 8 или что-то в этом роде –

+0

Могу ли я использовать Images.Media .EXTERNAL_CONTENT_URI вместо этого? –

+0

Да, он тоже должен работать. Вместо этого я отредактировал ответ. – Joe

2

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

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-карусель для отображения изображений с использованием renderscrip в качестве альтернативы.

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

Итоговый снимок. Карусель 3d тестировал на Jelly Bean.

enter image description here

Смежные вопросы