0

Я пытаюсь создать сборщик файлов для подключения к службе облачного хранилища. У меня нет проблем с прикреплением файлов к другим приложениям, и даже Gmail успешно возвращает результат моей работы и показывает правильную миниатюру на основе установленных URI/клипов.Ответ на Intent.ACTION_GET_CONTENT для вложения Gmail не удается при отправке электронной почты

Проблема в том, что когда вы действительно отправляетесь на отправку электронной почты, Gmail уведомляет пользователя «Не удается отправить вложение» и отправляет электронное письмо без вложения.

Я не знаю, что я делаю неправильно. Я попытался настроить URI как Intent.setData(), а также использовать URI и установить Intent.setClipData(). Кроме того, я попытался явно включить флаг для FLAG_GRANT_READ_URI_PERMISSION. Ни одна из этих проблем не решает проблему.

Любой, кто имеет представление о том, что может пойти не так, пожалуйста, звоните. Другие поставщики облачных услуг, похоже, не имеют проблем при прикреплении их контента через этот поток, поэтому я просто не знаю, что я делаю неправильно.

Мой код примерно выглядит следующим образом прямо сейчас, и по-прежнему не будет работать с Gmail:

Intent result = new Intent(); 
result.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
result.setData(uri); 

if (getActivity().getIntent().getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false)) { 
    String mime = Utils.getMimeType(document); 
    result.setClipData(new ClipData(document.getSimpleName(), new String[]{mime}, new ClipData.Item(uri))); 
    result.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
    result.putExtra(Intent.EXTRA_STREAM, uri); 
} 

getActivity().setResult(Activity.RESULT_OK, result); 
getActivity().finish(); 
+0

Какова ценность 'uri'? Указывает ли это на 'ContentProvider', который вы написали, на котором вы установили' android: grantUriPermissions'? – CommonsWare

ответ

0

Оказывается, проблема заключалась в том, что файл-Ури находится в каталоге хранения/хранения/эмулировать/0/имя_папки (новый файл (Environment.getExternalStorageDirectory(), "folder_name") не работал). Переключившись на Context.getExternalCacheDir() (/ sdcard/Android/data/packageName /), Gmail успешно смог получить вложение.

Очевидно, что Gmail имеет более строгие права доступа к файлам, к которым он имеет доступ, чем к другим приложениям (где он работал нормально до изменения). Просто, к сожалению, не было сообщения об ошибке, а скорее после сбоя в Gmail для этой ситуации, было нелегко выяснить, почему это не сработало.