Вопрос:
Я пытаюсь выяснить, почему, когда я пытаюсь открыть вложение электронной почты, в котором у меня есть фильтр намерений, он дает мне URI, с которого я не могу читать. URI, который он мне дает, это:
content://com.android.email.attachmentprovider/1/32/RAW
вместо:
/sdcard/Download/Attachments/MYZIP.ZIP
Код, который я вызываю, чтобы получить путь, this.getIntent().getData().getPath();
Единственный способ, которым он открывается, – сначала загрузить его, чтобы у него был путь, к которому я имею доступ.
Лучший ответ:
Это настраиваемый URI, предоставляемый сторонним приложением. Вы должны проверить их API о разрешениях на работу с их URI содержимого. Вот некоторая информация.
Обычно вы можете использовать ContentResolver.openInputStream(android.net.Uri), чтобы получить InputStream из этого URI, например:
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…