【问题标题】:Read the contents of a folder randomly随机读取文件夹内容
【发布时间】:2012-09-07 09:56:31
【问题描述】:

我有这段代码可以让我读取手机图库的内容并随机滚动其内容。

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

但我想修改此代码以读取我设置的文件夹的内容。我该怎么做?

非常感谢

【问题讨论】:

  • 我已经在我创建的文件夹中放入了一组文件,一旦安装并启动了应用程序。我尝试使用以下代码更改我发布的代码:Uri uri = Uri.parse("/sdcard/MyFolder/");
  • 我给了你起点:android-coding.blogspot.com/2011/10/… 来读取目录中的文件。由此,您可以通过将文件放在数组中来轻松获取其中的随机文件。
  • 基本上我的问题很简单,URI不应该是 Media.EXTERNAL_CONTENT_URI ,而是我指定的路径;并且光标应该在该文件夹中随机分布。
  • 您无法在目录上打开光标。媒体是抽象文件结构的内容提供者。使用文件

标签: android android-layout android-intent android-widget


【解决方案1】:

可能是最简单的方法之一:用数字命名文件夹中的每个文件,即(假设它们都是 jpg)将它们命名为 1.jpg、2.jpg、3.jpg 等。现在您需要做的就是生成一个介于 1 和文件夹中文件数之间的不同随机数数组,并通过将此随机数与 .jpg 连接生成一个 uri,然后显示它们。

【讨论】:

  • 基本上我的问题很简单,URI不应该是 Media.EXTERNAL_CONTENT_URI ,而是我指定的路径;并且光标应该在该文件夹中随机分布。
【解决方案2】:

也许您应该将 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 的值是什么... 就我个人而言,我什至看不到你在那里尝试做什么......

【讨论】:

  • 基本上我的问题很简单,URI不应该是 Media.EXTERNAL_CONTENT_URI ,而是我指定的路径;并且光标应该在该文件夹中随机分布。
【解决方案3】:

取出随机文件或选定目录非常容易。

你可以使用这个sn-p:

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

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

如果需要方法返回Uri,可以更改返回和方法签名:

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 要求,您应该能够将此方法包装到另一个方法并相应地桥接请求。

【讨论】:

  • 谢谢,但在我的应用程序中我需要 Uri 和 Cursor,因为我的方法返回 Uri 和 Cursor
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-03
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多