2013-03-13 64 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 2013-03-23 08:51:13

+0

是的,只顯示來自一個文件夾的所有圖像 – 2013-03-23 10:09:49

+1

我不知道畫廊3D。我用renderscript使用3d carosel。但是,如果假設該文件夾只有圖像,是否需要從單個文件夾中提取圖像路徑的代碼? – Raghunandan 2013-03-23 10:56:12

回答

1

「錯誤查找專輯」問題很可能是由於從代碼中獲得bucketId的「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意圖在提供vnd.android.cursor.dir/image MIME類型時處理應用程序。

+0

謝謝,我怎麼能在API級別8使用getContentUri或類似的東西 – 2013-03-24 09:53:51

+0

我可以使用Images.Media .EXTERNAL_CONTENT_URI而不是這個? – 2013-03-24 10:23:39

+0

是的,它也應該工作。我編輯了這個答案來代替它。 – Joe 2013-03-24 15:34:01

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在果凍豆上測試。

enter image description here

相關問題