【问题标题】:Pick an random image from photo gallery从照片库中随机选择一张图片
【发布时间】:2014-10-24 18:00:01
【问题描述】:

我需要从用户的照片库中随机选择一张图片。

我的意思不是像这样开始一个意图:

Intent gallery = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(gallery, GALLERY_PHOTO_REQUEST_CODE);

【问题讨论】:

    标签: java android random image-gallery


    【解决方案1】:

    我会这样做,但我不认为我可以选择所有画廊照片,我认为这是不可能的

    File picturesDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
    File[] listFiles = picturesDirectory.listFiles();
    Random r = new Random();
    File randomPicture = listFiles[r.nextInt(listFiles.length)];
    Uri pictureUri = Uri.fromFile(randomPicture);
    

    然后您可以使用该 Uri(或 File)对象来执行您的操作,例如将其加载到 imageView 中:mImageView.setImageUri(pictureUri);

    希望这会有所帮助!我记得您不会选择所有图片,而只会选择存储在该文件夹中的图片。事实上,许多应用程序将他们的图片保存在其他可能无法访问的个人文件夹中。

    【讨论】:

    【解决方案2】:

    使用它来获取所有图像,然后使用 Java Random 类随机选择数组的索引。获得后,您可以请求该特定图像。

        //where contextObject is your activity
        ContentResolver cr = contextObject.getContentResolver();
    
        String[] columns = new String[] {
                        ImageColumns._ID,
                        ImageColumns.TITLE,
                        ImageColumns.DATA,
                        ImageColumns.MIME_TYPE,
                        ImageColumns.SIZE };
        cur = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        columns, null, null, null);
    

    取自here的代码示例。

    【讨论】:

    • 一般在sortOrder参数中加"RANDOM()",取第一项,随机!
    • 我什至没有意识到你可以做到这一点。 OP遵循njzk2的建议。我不想编辑,因为我没有机会测试它并确保我的编辑确实有效,但你一定要试试这个。
    • 假设查询将被转换为 SQLite 查询。现在它可以工作了,但它打破了展示层和存储层之间的分离。
    猜你喜欢
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-11
    • 2018-10-04
    • 1970-01-01
    • 2016-07-13
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多