Android Присоединение файла к GMAIL - Не удается прикрепить пустой файл
У меня была программа, которая всегда прикрепляла бы тот же файл к GMAIL (Compose> Attach File> Open From> "MyProgram"). Он всегда выбирает один и тот же файл.
Что он делал:
String path = Environment.getExternalStorageDirectory() + "/file.3gp";
File f = new File(path);
Uri data = Uri.fromFile(f);
Intent i = new Intent();
i.setData(data);
setResult(Activity.RESULT_OK, i);
finish();
Это работало отлично до Android 6.0. Теперь, когда я пытаюсь его использовать, я получаю следующую ошибку:
Не удается подключить пустой файл
Astro File Sharing дает мне ту же ошибку (может быть старая сборка).
Тем не менее, я установил ES File Explorer, и когда я делаю ту же процедуру и выбираю файл, я получаю диалоговое окно, в котором говорится:
Поднимите файл как
- Обычный способ Android (для MMS, Gmail,...)
- File Way (попробуйте, если выше не удается)
"Путь к файлу" завершится неудачно, как моя программа. "Обычный способ Android" будет работать нормально.
Кто-нибудь имеет представление о том, что он делает, поэтому я могу реплицировать?
Заранее спасибо!
OBS: Уже много раз пыталась putExtra (STREAM, path), но безуспешно.
Ответы
Ответ 1
Хорошо, теперь он работает, после многих исследований и перехвата некоторых намерений.
Мне нужно было изменить файл:///на content://.
Я сделал это, следуя этой информации с Android: https://developer.android.com/reference/android/support/v4/content/FileProvider.html
Единственное серьезное изменение заключалось в том, что я использовал жестко закодированный путь к /sdcard/file.ext. Кроме того, линия
getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);
был изменен на
Uri contentUri = FileProvider.getUriForFile(this, "com.mydomain.fileprovider", newFile);
Также необходимо было включить:
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(contentUri);
Я не совсем понимаю, почему мне пришлось перейти от "Файл к контенту", но после этого файл теперь снова подключается! См. Ссылку, если вы столкнулись с этой проблемой, и не забывайте о новом.xml, который необходимо создать.
Ответ 2
См. Следующий вопрос:
андроид-6-не может -доля файлы-больше
Такое поведение наблюдается в Android 6.0 и Gmail. См. Следующий раздел.
Выпуск 3141 - андроид-разработчик-превью
Если вы перейдете в Settings-> Приложения → Gmail-> Разрешения и разрешите разрешение "Хранение" вручную, тогда общий ресурс будет работать.
Gmail должен запросить разрешение "Хранение" в этом сценарии, и он будет работать так же, как и во всех предыдущих версиях Android.
Другие приложения электронной почты должны правильно обрабатывать вложения.
Ответ 3
Вот как это исправить.
Перейдите в Настройки → Приложения → Gmail → Разрешения. Включите разрешение для "Хранение". Эта работа решила проблему для меня.
Ответ 4
Я не смог найти четкий ответ (отправка вложения на gmail без SD-карты). Я попытался скопировать другое имя файла, но не сигару. То, как я получил его на работу, это копирование в папку "Загрузка" и переход оттуда.
Получите путь для загрузок с помощью этого файла Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
вытаскивает полный путь в папку downlaods, копируя attachemnt туда, и мы хороши. Файлы более 20M не идут