我试图找出原因,当我尝试打开一个我有意图过滤器的电子邮件附件时,它给了我一个我无法读取的URI。它给我的URI是:
content://com.android.email.attachmentprovider/1/32/RAW
而不是:
/sdcard/Download/Attachments/MYZIP.ZIP
我打电话来获取路径的代码是this.getIntent().getData().getPath();
正确打开的唯一方法是首先下载它,以便它有一个我能够访问的路径。
答案 0 :(得分:3)
这是第三方应用提供的自定义URI。您应该检查他们的API有关使用其内容URI的权限。这是some information。
通常,您可以使用ContentResolver.openInputStream(android.net.Uri)
从该URI获取InputStream
,例如:
import java.util.zip.ZipInputStream;
// ...
public static void test(Context context) throws Exception {
Uri uri = Uri.parse("content://com.android.email.attachmentprovider/1/32/RAW");
ZipInputStream zis = new ZipInputStream(
context.getContentResolver().openInputStream(uri));
try {
// ...
} finally {
zis.close();
}
}
但这取决于供应商(如果他们提供此类访问权限)。因此,请务必检查他们的SDK / API ...