J'utilise l'API FileProvider pour partager du contenu stocké dans le stockage interne. Voici la configuration de mon xml qui est liée au fournisseur configuré dans le fichier Manifest.Partager un fichier audio à partir du répertoire/data/user/0/à l'aide de FileProvider
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<cache-path name="xs_audio" path="/audio/records"/>
</paths>
et le code que j'utilise pour partager suit:
private final static String FILE_PROVIDER = BuildConfig.APPLICATION_ID + ".fileprovider";
private String testPackageAppHaveAccess = "com.whats";
public static void shareDocument(Activity activity, CallRecordData data) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.putExtra(Intent.EXTRA_SUBJECT, "Record File");
intent.setType("audio/*");
ArrayList<Uri> files = new ArrayList<>();
//for (AudioModelObj image : data.getDocuments()) {
files.add(getImageUri(activity, data.getFile()));
//}
activity.grantUriPermission(testPackageAppHaveAccess, files.get(0), Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files);
activity.startActivity(Intent.createChooser(intent, "Share Audio File."));
}
private static Uri getImageUri(Activity activity, String audioURI) {
if (Build.VERSION.SDK_INT < 24) {
return Uri.parse(audioURI);
} else {
URI uri = URI.create(audioURI);
File file = new File(uri);
return FileProvider.getUriForFile(activity, FILE_PROVIDER, file);
}
}
}
mais en lançant avec application ce n'est pas fixer quoi que ce soit. Dans le cas de gmail, il est dit "impossible de joindre un fichier vide". Le fichier est valablement disponible car j'affiche la liste des fichiers et joue.
Pour référence: générer à partir de Uri getImageUri (..) est
/data/user/0/com.xl.cl.debug/cache/audio/records/17-10-17_170728_abc_.wav
Une suggestion de ce que je fais mal?
AFAIK, comme par [** doc développeur **] (https://developer.android.com/reference/android/support/v4/content/FileProvider.html#Permissions) _activity.grantUriPermission_ est correct, il doit appeler avec l'objet Context. Et ajouter le nom du paquet d'applications à qui il devrait permettre le partage n'est pas quelque chose qui sera un code rigide, alors que l'utilisateur peut avoir plusieurs applications. Veuillez vérifier que j'ai mis à jour la question. – CoDe
Aussi je voulais partager un fichier audio, est-ce une bonne approche? – CoDe
@code: Débarrassez-vous de l'URI et créez simplement le fichier.Utilisez un type MIME spécifique, pas un caractère générique. Et vous pouvez commencer avec un simple ACTION_SEND et un seul Uri pour commencer. – CommonsWare