通过MediaStore.Video.Media.query获取资源进行删除(有些版本无法正常删除)
private void deletImage() {
ContentResolver resolver = 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[]{tempImgPath}, null);
boolean res = 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 = getContentResolver().delete(uri, null, null);
res = count == 1;
} else {
File file = new File(tempImgPath);
res = file.delete();
}
//如果要删除的图片是收藏的图片,则要从收藏的表里删除
if (!res) {
Toast.makeText(SignatureActivity.this, "删除失败,可以在系统图库中删除。", Toast.LENGTH_LONG).show();
}
}
- 获取多媒体资源
public static final Cursor query(ContentResolver cr, Uri uri, String[] projection,
String selection, String [] selectionArgs, String orderBy)
- 解析:
ContentResolver cr :
ContentResolver是应用与资源之间的衔接人,它的示例通常可以通过在Activity中调用的getContentResolver()方法中获取
Uri uri:
前面提到的多媒体文件的第一种地址描述
eg: MediaStore.Images.Media.EXTERNAL_CONTENT_URI 图片的外部库地址
--
String[] projection:这个参数限定了返回的内容(列Column)。
eg: new String[]{ MediaStore.Images.Media.DISPLAY_NAME,MediaStore.Images.Media._ID } :限定了返回的结果中只包含图片的 DISPLAY_NAME 和 _ID 信息
--
String selection:
设置条件,相当于SQL语句中的where。null表示不进行筛选。
eg: MediaStore.Images.Media.DATA + "=?'tempImgPath'" ,只返回名称为 helloworld 的图片数据。
--
String [] selectionArgs:
这个参数是要配合selection参数使用的,如果你在selection 参数里面有?,那么你在selectionArgs写的数据就会替换掉?
eg:当 selection = MediaStore.Images.Media.DATA + “=?” ,selectionArgs= new String[]{"tempImgPath"}的效果与上个例子是一样的
--
String orderBy:
按照什么进行排序,相当于SQL语句中的Order by。默认排序是升序,+" ASC"写不写效果都一样。如果想要结果按照ID的降序排列:orderBy=MediaStore.Images.Media._ID+" desc " 。
作者:haha_zhan
来源:CSDN
原文:https://blog.csdn.net/haha_zhan/article/details/52584331
版权声明:本文为博主原创文章,转载请附上博文链接!