刷新使用MediaScanner缩略图 [英] Refreshing the thumbnail using MediaScanner

查看:1479
本文介绍了刷新使用MediaScanner缩略图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我保存到新位置的图像,然后使用MediaScanner刷新库,然后一切都很好 - 。缩略图和图像刷新以及

但是,当我保存到现有位置的图像,然后使用MediaScanner - 那么只有新未启用缩略图刷新。 (即使文件被覆盖)。

如何解决呢?

下面是我的code:

 文件fil​​e =新的文件(SDCARD_PATH,文件名);尝试{
    FileOutputStream中出=新的FileOutputStream(文件);
    bmp.com preSS(格式,BEST_IMAGE_QUALITY,淘汰);
}赶上(FileNotFoundException异常五){}//刷新利用媒体扫描单个文件,无需粘贴


解决方案

这是在Android中常见的和众所周知的问题。如果编辑媒体文件,缩略图似乎并没有更新。

我对这个修复,但是,它仍然是一个修复,而不是一个干净的解决方案。
我的解决方法是简单,它基本上是删除过时的缩略图,然后使用介质的扫描仪来更新缩略图。

Here're应遵循的步骤:

步骤1.编辑为你喜欢的文件。说名,myVideoToBeEdited。

第二步:一旦你完成编辑,删除其现有的缩略图。
首先,使用获得的视频ID code是这样的:

 最终的String [] =列{
                    BaseColumns._ID,MediaColumns.DATA
                };            ContentResolver的CR = context.getContentResolver();
            光标光标= cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,列,NULL,NULL,NULL);            布尔取消= FALSE;
            如果(NULL!=光标){
                而(cursor.moveToNext()及&放大器;!取消){
                    字符串文件名= cursor.getString(cursor.getColumnIndex(MediaColumns.DATA));
                    INT imageId = cursor.getInt(cursor.getColumnIndex(BaseColumns._ID));                    如果(fileName.equals(myVideoToBeEdited)){
                        removeVideoThumbnail(getContentResolver(),imageId); //第3步
                        取消= TRUE;
                    }
                }
            }

有其他方式获得的id和更优化的以及。

步骤3.删除缩略图。

 公共无效removeVideoThumbnail(ContentResolver的ContentResolver的,长PHOTOID){
        光标缩略图= contentResolver.query(android.provider.MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,空,android.provider.MediaStore.Video.Thumbnails.VIDEO_ID +=?,新的String [] {将String.valueOf(PHOTOID)} , 空值);
        为(thumbnails.moveToFirst();!thumbnails.isAfterLast(); thumbnails.moveToNext()){            长THUMBNAILID = thumbnails.getLong(thumbnails.getColumnIndex(android.provider.MediaStore.Video.Thumbnails._ID));
            字符串路径= thumbnails.getString(thumbnails.getColumnIndex(android.provider.MediaStore.Video.Thumbnails.DATA));
            档案文件=新的文件(路径);
            如果(file.delete()){                contentResolver.delete(android.provider.MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,android.provider.MediaStore.Video.Thumbnails._ID +=?,新的String [] {将String.valueOf(THUMBNAILID)});            }        }
    }

或者,这里的删除图像的缩略图的方法

 公共无效removeImageThumbnail(ContentResolver的ContentResolver的,长PHOTOID){
        光标缩略图= contentResolver.query(android.provider.MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,空,android.provider.MediaStore.Images.Thumbnails.IMAGE_ID +=?,新的String [] {将String.valueOf(PHOTOID)} , 空值);
        为(thumbnails.moveToFirst();!thumbnails.isAfterLast(); thumbnails.moveToNext()){            长THUMBNAILID = thumbnails.getLong(thumbnails.getColumnIndex(android.provider.MediaStore.Images.Thumbnails._ID));
            字符串路径= thumbnails.getString(thumbnails.getColumnIndex(android.provider.MediaStore.Images.Thumbnails.DATA));
            档案文件=新的文件(路径);
            如果(file.delete()){                contentResolver.delete(android.provider.MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI,android.provider.MediaStore.Images.Thumbnails._ID +=?,新的String [] {将String.valueOf(THUMBNAILID)});            }        }
    }

步骤4.最后用扫描介质连接扫描的文件,以便更新缩略图。

  MediaScannerConnection.scanFile(背景下,
              新的String [] {} myVideoToBeEdited,空,
              新MediaScannerConnection.OnScanCompletedListener(){
          公共无效onScanCompleted(字符串路径,开放的URI){
                      //传递MIME类型,否则传递一个空将使文件扩展名来决定MIME类型
              //你是好去
          }
     });

When I save an image to new location and then use MediaScanner to refresh the gallery then everything is fine - thumbnails and images are refreshed well.

But when I save an image to EXISTING location and then use MediaScanner - then only 'new' thumbnail isnt refreshed. (even though file is overwritten).

How to solve it?

Here is my code :

File file = new File(SDCARD_PATH, filename);

try {
    FileOutputStream out = new FileOutputStream(file);
    bmp.compress(format, BEST_IMAGE_QUALITY, out);
}catch (FileNotFoundException e) {

}

//refreshing single file using media scanner, no need to paste

解决方案

This is a common and well know problem in Android. If you edit a media file, the thumbnail does not seem to update.

I have a fix for this, however, its still a fix and not a clean solution. My fix is simple, and it basically deletes the stale thumbnail and then uses media scanner to update the thumbnails.

Here're the steps to be followed:

Step 1. Edit the file as you like. Say filename, "myVideoToBeEdited".

Step 2. Once you are done editing, delete its existing thumbnail. First, get the video id using code like this:

                final String[] columns = {
                    BaseColumns._ID, MediaColumns.DATA
                };

            ContentResolver cr = context.getContentResolver();
            Cursor cursor = cr.query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, columns, null, null, null);

            boolean cancel = false;
            if(null != cursor){
                while(cursor.moveToNext() && !cancel){
                    String fileName = cursor.getString(cursor.getColumnIndex(MediaColumns.DATA));
                    int imageId = cursor.getInt(cursor.getColumnIndex(BaseColumns._ID));

                    if(fileName.equals(myVideoToBeEdited)){
                        removeVideoThumbnail(getContentResolver(), imageId); // step 3
                        cancel = true;
                    }
                }
            }

There are other ways to get the id, and more optimised ones as well.

Step 3. Delete the thumbnail.

        public void removeVideoThumbnail(ContentResolver contentResolver, long photoId) {
        Cursor thumbnails = contentResolver.query(android.provider.MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, null, android.provider.MediaStore.Video.Thumbnails.VIDEO_ID + "=?", new String[]{String.valueOf(photoId)}, null);
        for (thumbnails.moveToFirst(); !thumbnails.isAfterLast(); thumbnails.moveToNext()) {

            long thumbnailId = thumbnails.getLong(thumbnails.getColumnIndex(android.provider.MediaStore.Video.Thumbnails._ID));
            String path = thumbnails.getString(thumbnails.getColumnIndex(android.provider.MediaStore.Video.Thumbnails.DATA));
            File file = new File(path);
            if (file.delete()) {

                contentResolver.delete(android.provider.MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, android.provider.MediaStore.Video.Thumbnails._ID + "=?", new String[]{String.valueOf(thumbnailId)});

            }

        }
    }

Or, here's the method to delete image thumbnail

    public void removeImageThumbnail(ContentResolver contentResolver, long photoId) {
        Cursor thumbnails = contentResolver.query(android.provider.MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, null, android.provider.MediaStore.Images.Thumbnails.IMAGE_ID + "=?", new String[]{String.valueOf(photoId)}, null);
        for (thumbnails.moveToFirst(); !thumbnails.isAfterLast(); thumbnails.moveToNext()) {

            long thumbnailId = thumbnails.getLong(thumbnails.getColumnIndex(android.provider.MediaStore.Images.Thumbnails._ID));
            String path = thumbnails.getString(thumbnails.getColumnIndex(android.provider.MediaStore.Images.Thumbnails.DATA));
            File file = new File(path);
            if (file.delete()) {

                contentResolver.delete(android.provider.MediaStore.Images.Thumbnails.EXTERNAL_CONTENT_URI, android.provider.MediaStore.Images.Thumbnails._ID + "=?", new String[]{String.valueOf(thumbnailId)});

            }

        }
    }

Step 4. And finally use media scanner connection to scan the file so that it updates the thumbnails.

         MediaScannerConnection.scanFile(context,
              new String[] { myVideoToBeEdited }, null,
              new MediaScannerConnection.OnScanCompletedListener() {
          public void onScanCompleted(String path, Uri uri) {
                      // pass the mime type, else passing a null will enable file extension to dictate the mime type
              // you are good to go
          }
     });

这篇关于刷新使用MediaScanner缩略图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆