当前位置: 移动技术网 > IT编程>移动开发>Android > Android 内容提供者刷新图片 和 Arraylist排序

Android 内容提供者刷新图片 和 Arraylist排序

2018年03月09日  | 移动技术网IT编程  | 我要评论

机甲旋风夜间版,樊永杰,句号

前言: 把我之前自己写的图片选择器转移到我们公司的项目里了,然后发现了无数的坑,一路填过来,很难受,不过最终还是搞的差不多了,代码还没传,下篇随笔在给连接,先把标题要讲的写出来

1我以前一直不懂内容提供者为什么能成为四大组件之一(我技术这么菜是有原因的!!),现在才懂一点

不管是删除图片,还是新拍图片,都要通过内容提供者通知安卓系统一声,否则

添加图片如果不通知一下,结果就是拍下来的图片在手机相册里找不到,并且通过内容提供者查找图片也查不到,但是你去你设定好的路径去看,它就安静的在那里!!!

删除图片如果不通知一下,结果就是通过内容提供者查找图片的时候,还能找到已经被删掉的图片的地址,但其实那个地址已经没有图片了!!!

具体怎么通知

添加图片

MediaScannerConnection.scanFile(this, new String[]{图片的绝对路径}, null, null);

在这里要说一下第2个坑,百度上比较多的文章都是写的先插入到系统图库,在通知。

代码是酱婶儿的

try {
                MediaStore.Images.Media.insertImage(context.getContentResolver(), output.getAbsolutePath(),
                        output.getName(), null);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, imageUri));

坑在哪里,第一点:我是先把图片保存到我指定的路径了,然后在调用的上面的方法,然后重点来了,相册里和我的指定路径里各有一张图片!!!

第二,在低版本手机里(我用的模拟器),经过这么一弄,内容提供者一下找出来俩一样的图片,高版本手机呢,只找到相册里那一张,如果那相册里的删掉,那我指定路径里的图片留在手机里浪费内存!!!

总之我个人认为上面的办法略坑。

再说删除图片

private void DeleteImage(String imgPath) {
        ContentResolver resolver = context.getContentResolver();
        Cursor cursor = MediaStore.Images.Media.query(resolver, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.Media._ID}, MediaStore.Images.Media.DATA + "=?",
                new String[]{imgPath}, null);
        boolean result = false;
        if (cursor.moveToFirst()) {
            long id = cursor.getLong(0);
            Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            Uri uri = ContentUris.withAppendedId(contentUri, id);
            int count = context.getContentResolver().delete(uri, null, null);
            result = count == 1;
        } else {
            File file = new File(imgPath);
            result = file.delete();
        }

        if (result) {
            Toast.makeText(context, "删除成功", Toast.LENGTH_LONG).show();
        }
    }

3按修改先后的顺序排列图片(时间顺序)(刚拍完的在前)

因为所有的照片都被我以bean的形式保存在list里了,所以简单地说就是list的排序问题

先获取图片的修改时间

new Date(file.lastModified()).getTime() //file 就是图片

之后就是一个让我惊呆了的排序方法(java太菜没有办法)

让我得bean类 实现Compartor接口,然后实现compare方法

@Override
    public int compare(PhotoBean o1, PhotoBean o2) {
         if(o1.getTime() > o2.getTime()){ 
                return -1;
        }else{
            return 1;
        }
    }

这个排序方法不多解释了,百度就好,但是我今天才知道这样子排序,惊了个呆!!

排序的时候直接

Collections.sort(list, new bean类);

就好了,这样就实现Arraylist的排序了

4最后看一下模拟器上的效果吧,模拟器没有摄像头不过不影响效果

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网