web-dev-qa-db-fra.com

Android Association d'un fichier à GMAIL - Impossible de joindre un fichier vide

J'avais un programme qui attacherait toujours le même fichier à GMAIL (Compose> Attach File> Open From> "MyProgram"). Il sélectionnerait toujours le même fichier.

Ce qu'il faisait était:

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();

Cela fonctionnait bien jusqu'à Android 6.0 . Maintenant, je reçois le message d'erreur suivant lorsque je tente de l'utiliser:

Impossible de joindre un fichier vide

Astro File Sharing me donne la même erreur (peut être une ancienne construction).

Cependant, j'ai installé ES File Explorer, et quand je fais la même routine et que je sélectionne le fichier, je reçois un dialogue qui dit:

Ramasser le fichier en tant que

  • Mode Android normal (pour MMS, Gmail, ...)
  • Manière de fichier (essayez ceci si le précédent échoue)

Le "File Way" échouera comme le fait mon programme. Le "Normal Android Way" fonctionnera bien.

Quelqu'un a-t-il une idée de ce qu'il fait pour que je puisse le reproduire?

Merci d'avance!

OBS: J'ai déjà essayé le putExtra (STREAM, chemin) plusieurs fois, mais sans succès.

18
GuiFGDeo

Ok, le faire fonctionner maintenant, après beaucoup de recherches et d'interception de certaines intentions.

Ce que je devais faire était de changer le fichier: /// en contenu: //.

Je l'ai fait en suivant ces informations sur Android: https://developer.Android.com/reference/Android/support/v4/content/FileProvider.html

Le seul changement majeur est que j'ai utilisé un chemin codé en dur vers /sdcard/file.ext.Also, la ligne

getUriForFile(getContext(), "com.mydomain.fileprovider", newFile);

a été changé en

Uri contentUri = FileProvider.getUriForFile(this, "com.mydomain.fileprovider", newFile);

Aussi devait inclure:

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
i.setData(contentUri);

Je ne comprends pas vraiment pourquoi j'ai dû changer de Fichier à Contenu, mais après cela, le fichier est à nouveau attaché! Consultez le lien si vous faites face à ce problème et n'oubliez pas le nouveau fichier .xml à créer.

16
GuiFGDeo

Voir la question suivante:

Android-6-ne peut plus partager de fichiers

Ce comportement est avec Android 6.0 et Gmail. S'il vous plaît voir le fil suivant.

Issue 3141 - Android-developer-preview

Si vous allez dans Paramètres-> Applications-> Gmail-> Autorisations et activez le Autorisation "Stockage" manuellement, puis le partage fonctionne.

Gmail devrait demander l’autorisation "Stockage" dans ce scénario et le fonctionnerait comme dans toutes les versions précédentes d’Android.

Les autres applications de messagerie doivent gérer les pièces jointes correctement.

14
mkabatek

Voici comment y remédier.

Allez dans Paramètres -> Applications -> Gmail -> Autorisations Activez l'autorisation pour "Stockage" Cette solution a résolu le problème pour moi. 

1
Dan Brooker

Je n'ai pas trouvé de réponse claire (envoi d'une pièce jointe sur gmail sans carte SD). J'ai essayé de copier vers un autre nom de fichier, mais pas de cigare. La façon dont je l’ai fait fonctionner a été copiée dans le dossier Téléchargements et à partir de là.

Obtenez le chemin pour les téléchargements avec ceci Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DOWNLOADS)

tire le chemin complet vers le dossier de téléchargement, copiez la pièce jointe à cet endroit et tout va bien. Les fichiers de plus de 20M ne vont pas

0
becker