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.
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.
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.
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.
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