我创建了一个图像查看器,使用其文件名打开图像。当您使用URI单击文件管理器中的图像时,它也可以工作,并将其设置为我的默认查看器。
但是,如果我收到一封附有图片作为附件的电子邮件(我使用K9邮件客户端),然后点击图像拇指,我的查看器将文件名称为“VIEW”。有道理,系统中没有文件。当然,我可以保存附件并查看它,但我不想这样做。
所以,我的问题是:如何让我的观众直接获得附件?也许这是正确的问题:当您点击电子邮件中的附件“链接”时,电子邮件客户端会返回什么?
修改的
这就是我尝试在代码中打开URI的方式:
uri = getIntent().getData();
if (uri != null)
String file = getRealPathFromURI(uri);
和功能getRealPathFromURI
是:
private String getRealPathFromURI(Uri contentURI) {
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null || cursor.getCount() == 0) {
return contentURI.getPath();
} else if (cursor.getCount() == 0) {
return null;
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String path = cursor.getString(idx);
cursor.close();
return path;
}
}
使用此代码,我得到路径content://com.fsck.k9.attachmentprovider/34fc2cc9-aa46-45e9-9e3f-2f27f0457249/1/VIEW
,当然这是错误的。正确的应该是/mnt/sdcard/Android/data/com.fsck.k9/files/34fc2cc9-aa46-45e9-9e3f-2f27f0457249.db_att/1
。
所以正确的问题是:为什么上面的getRealPathFromURI()
函数没有返回正确的文件路径?