2

我使用以下代码获取缩略图并将其填充到 gridView 中。
我猜图像的信息as BUCKET_DISPLAY_NAME,MediaStore.Images.Media.DATA and MediaStore.Images.Media._ID存储在一个数据库中,而图像的缩略图存储在另一个数据库中。

所以如果我要删除一张图片,我需要删除三部分,一是物理文件,二是图片信息在数据库中的记录,三是缩略图在另一个数据库中的记录,对吧?
下面的代码只是删除了两部分,一是物理文件,二是数据库中图像信息的记录。如何删除缩略图记录?谢谢!

顺便说一句,代码

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

不是很好,因为它是异步的,我需要在删除图像后立即获取最新的缩略图。

还有更多,将

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

更新图像的信息数据库和缩略图数据库?

private void FillImageAndThumb() {
    this.count = curPublic.getCount();
    this.thumbnails = new Bitmap[this.count]; 
    this.arrPath = new String[this.count];
    this.thumbnailsselection = new boolean[this.count];
    this.myID=new int[this.count];

    for (int i = 0; i < this.count; i++) {
        curPublic.moveToPosition(i);
        int id = curPublic.getInt(curPublic.getColumnIndex(MediaStore.Images.Media._ID));
        int dataColumnIndex =curPublic.getColumnIndex(MediaStore.Images.Media.DATA);
        myID[i]=id;
        thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
                          getApplicationContext().getContentResolver(), 
                          id,
                          MediaStore.Images.Thumbnails.MICRO_KIND, 
                          null);
        arrPath[i] = curPublic.getString(dataColumnIndex);
    }
}   

private void SetCurPublic(AdapterView<?> arg0,int index){
    String[] projection = new String[]{
            MediaStore.Images.Media._ID,
            MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
            MediaStore.Images.Media.DATA
    };

    Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    if (index==0){
        curPublic = getContentResolver().query(
            images,
                projection,
                "",          
                null,   
                ""   
                );
    }else{
        String s=arg0.getSelectedItem().toString();
        curPublic=  getContentResolver().query(
                images,
                projection,           
                MediaStore.Images.Media.BUCKET_DISPLAY_NAME+"=?", 
                new String[]{s},         
                "" // Ordering
                );
    } 
}


public void DeleteSelected() {
    for (int i = 0; i < thumbnailsselection.length; i++) {
        if (thumbnailsselection[i]) {
            File fdelete = new File(arrPath[i]);
            if (fdelete.exists()) {
                if (fdelete.delete()) {
                    Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                    String mSelectionClause = MediaStore.Images.Media._ID
                            + "=?";
                    String[] mSelectionArgs = { String.valueOf(myID[i]) };
                    getContentResolver().delete(
                            images,
                            mSelectionClause, 
                            mSelectionArgs
                            );
                }
            }
        }
    }
}    
4

0 回答 0