【问题标题】:android - refresh all the thumbnails on the device before loading the gallery?android - 在加载画廊之前刷新设备上的所有缩略图?
【发布时间】:2014-07-21 05:11:26
【问题描述】:

我有一个应用程序,它使用光标从媒体存储中加载缩略图(到网格视图中):

        CursorLoader cursorLoader = null;
    if (Integer.valueOf(android.os.Build.VERSION.SDK_INT) >= android.os.Build.VERSION_CODES.HONEYCOMB) {
        String[] from = { MediaStore.Files.FileColumns._ID,
                MediaStore.Files.FileColumns.DATA,
                MediaStore.Files.FileColumns.DATE_ADDED,
                MediaStore.Files.FileColumns.MEDIA_TYPE,
                MediaStore.Files.FileColumns.MIME_TYPE,
                MediaStore.Files.FileColumns.TITLE };
        projection = from;
        String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE + " OR "
                + MediaStore.Files.FileColumns.MEDIA_TYPE + "="
                + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO;
        Uri queryUri = MediaStore.Files.getContentUri("external");
        cursorLoader = new CursorLoader(this, queryUri, projection,
                selection, null, MediaStore.Files.FileColumns.DATE_ADDED
                        + " DESC");
    } else {
        String[] from = { MediaStore.MediaColumns.DATE_ADDED };
        projection = from;
        Uri sourceImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
        cursorLoader = new CursorLoader(this, sourceImageUri, null, null,
                null, MediaStore.MediaColumns.DATE_ADDED + " DESC");
    }
    Cursor cursor = null;
    if (cursorLoader != null) {
        cursor = cursorLoader.loadInBackground();
        mGalleryAdapter = new GalleryAdapter(this,
                android.R.layout.simple_list_item_1, cursor, projection,
                to, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
        gallery.setAdapter(mGalleryAdapter);
        gallery.setOnItemClickListener(myOnItemClickListener);
    }

但是,一些较新的图像加载时没有缩略图,这很愚蠢。只有当我在手机上打开图库应用(照片)时才会生成缩略图。

如何以编程方式刷新设备上的所有缩略图,这样就没有没有缩略图的图像留白?

我希望这适用于所有 Android 版本,包括 4.4。在此先感谢:)

【问题讨论】:

    标签: android thumbnails mediastore


    【解决方案1】:

    您应该能够通过以下方式触发重新扫描:

    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                            Uri.parse("file://"
                            + Environment.getExternalStorageDirectory())));
    

    您可能需要更改路径以满足您的需要。

    Found here


    如果您想等待扫描完成后再继续前进,您需要为ACTION_MEDIA_SCANNER_FINISHED Intent 注册一个接收器。

    Details and discussion on that here/RdvA7y4MqfE


    kaiwid23 建议这不适用于 4.4+。在这种情况下,您可以使用MediaScannerConnection 手动控制扫描仪。

    您将需要使用MediaConnection.scanFile() 方法。我不知道如果提供了一个目录,它是否可以递归工作,或者它是否只接受单个路径。

    在这种情况下,您在构造函数中传递了一个OnScanCompletedListener,因此监视扫描是否完成实际上要容易得多。

    【讨论】:

      【解决方案2】:

      编辑:

      使用MediaStore.Images.Thumbnails.getThumbnail()MediaStore.Video.Thumbnails.getThumbnail() - 它是一个阻塞类,如果找不到,就会生成一个新的位图。简单得多。

      您只需要文件的 MediaStore ID,我假设您已经拥有该 ID,并且您可以在 Activity 中或通过上下文使用标准的 getContentResolver()。此方法还允许您直接获取 MINI 或 MICRO 尺寸的位图。

      更多关于here


      旧答案:

      正如不可分割所说,你可以使用

      sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                          Uri.parse("file://"
                          + Environment.getExternalStorageDirectory())));
      

      但是,这不适用于 Android 4.4(我认为),因此请考虑使用 API 19+ 的 MediaScanner 类。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-25
        • 2012-01-31
        相关资源
        最近更新 更多