我有带图像导出功能的图像编辑应用程序。以前我尝试通过将文件路径uri传递给ACTION_SEND intent来直接导出它。类似的东西:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
shareIntent.setType("image/*");
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(shareIntent, getString(R.string.export)));
但并非所有应用都能正确解析此类意图。所以现在我首先通过将图像添加到android的MediaStore来准备uri:
shareUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),
file.getAbsolutePath(), file.getName(), projectName));
...然后将shareUri传递给intent。现在所有应用程序都可以正确处理此意图,但会出现一个问题 - 每次用户导出图像时,其副本都会添加到android MediaStore中(即使图像路径和名称相同)。
我试图通过以下代码确定已经添加到mediastore的图像:
Cursor c = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, MediaStore.Images.Media.DATA + "=?",
new String[] { filePath }, null);
if (c.getCount() > 0 && c.moveToFirst()) {
shareUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"" + c.getInt(c.getColumnIndex(MediaStore.Images.Media._ID)));
c.close();
} else {
shareUri = Uri.parse(MediaStore.Images.Media.insertImage(getContentResolver(),
file.getAbsolutePath(), file.getName(), projectName));
}
...但是c.getCount()总是== 0.即使我从MediaStore.Images.Media.insertImage复制保存的uri并直接通过
查询它Cursor c = getContentResolver().query(savedUri, null, null, null);
我如何检测MediaStore中已存在的图像文件?