2012-09-07 247 views
2

我有這段代碼,它允許我讀取手機庫的內容並隨機滾動其內容。隨機閱讀文件夾的內容

public static Uri getRandomImage(ContentResolver resolver) { 

    String[] projection = new String[] { 
     BaseColumns._ID 

    }; 

    Random rand = new Random(); 
    int p = 2 + rand.nextInt(8-2+1); 

    Uri uri = p == 0 ? Media.EXTERNAL_CONTENT_URI : Media.EXTERNAL_CONTENT_URI; 

    Cursor cursor = Media.query(resolver, uri, projection, null, MediaColumns._ID); 
    if (cursor == null || cursor.getCount() <= 0) { 
      return null; 
    } 

    cursor.moveToPosition(new Random().nextInt(cursor.getCount())); 

    return Uri.withAppendedPath(uri, cursor.getString(0)); 
} 

但我想修改此代碼來讀取我設置的文件夾的內容。我怎樣才能做到這一點?

非常感謝你

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/? – njzk2

+0

只要應用程序安裝並啓動,我已經將一組文件放入由我創建的文件夾中。我試圖改變我發佈的代碼,使用這個:Uri uri = Uri.parse(「/ sdcard/MyFolder /」); – David

+0

我給你起點:http://android-coding.blogspot.com/2011/10/list-filesdirectory-in-android.html讀取目錄中的文件。從這裏,你可以通過將文件放在第一個數組中,輕鬆獲得隨機文件。 – ariefbayu

回答

0

可能做的最簡單的方法之一:文件夾命名爲數字,即在每個文件(假設他們都是JPG),他們的名字1.JPG,2.JPG,3.JPG和等等。現在,您只需在文件夾中生成一個1到幾個文件之間不同隨機數的數組,然後通過將這個隨機數與.jpg連接起來生成一個uri,然後顯示它們。

+0

基本上我的問題很簡單,URI不應該是Media.EXTERNAL_CONTENT_URI,而是一個從我指定的路徑;並且光標應該在該文件夾中隨機移動。 – David

0

也許你應該將URI設置爲不同的值?

Random rand = new Random(); 
int p = 2 + rand.nextInt(8-2+1); 

Uri uri = p == 0 ? Media.EXTERNAL_CONTENT_URI : Media.EXTERNAL_CONTENT_URI; 

該代碼始終將URI來Media.EXTERNAL_CONTENT_URI ......無論什麼整數P的值是... 個人而言,我其實並不能甚至可以看到你正在嘗試在那裏做。 ..

+0

基本上我的問題很簡單,URI不應該是Media.EXTERNAL_CONTENT_URI,而是一個從我指定的路徑;並且光標應該在該文件夾中隨機移動。 – David

0

獲取隨機文件或選定的目錄很容易。

您可以使用此代碼段:如果您需要該方法返回的Uri

private File getRandomFile(File root) { 
    File[] files = root.listFiles(); 

    Random randomizer = new Random();  
    return files[randomizer.nextInt(files.length - 1)]; 
} 

,你可以改變返回和方法簽名:

private Uri getRandomFile(File root) { 
    File[] files = root.listFiles(); 

    Random randomizer = new Random();  
    File f = files[randomizer.nextInt(files.length - 1)]; 
    return Uri.fromFile(f); 
} 

至於cursor要求,你應該能夠將此方法包裝到另一個方法並相應地橋接請求。

+0

謝謝,但在我的應用程序中,我需要Uri和光標,因爲我的方法返回Uri和光標 – David

+0

請參閱我的更新答案。 – ariefbayu