2017-09-21 9 views
0

Je travaille sur une application Android qui est déjà partage avec succès un fichier PDF généré via Bluetooth en utilisant la méthode suivante:Comment partager par programme plusieurs fichiers de différents types MIME dans la même intention Android?

public static void sharePdfFile(Context ctx, String pathAndFile) { 
    try { 
     Intent share = new Intent(Intent.ACTION_SEND); 

     share.setPackage("com.android.bluetooth"); 
     share.setType("application/pdf"); 
     share.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathAndFile)); 
     share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     ctx.startActivity(share); 
    } catch (Exception e) { 
     ExceptionDAO.Log(CATEGORY.SHARE_INTENT, e, ctx, e.getMessage(), true); 
    } 
} 

On m'a demandé d'inclure un second fichier (format CSV) dans cette intention de la part de façon que les deux fichiers sont envoyés ensemble.   J'ai immédiatement trouvé this question, qui traite de l'envoi de plusieurs fichiers via Bluetooth, mais seulement en utilisant les fichiers du même type MIME (« video/* » dans cet exemple.)

j'ai trouvé beaucoup d'exemples de MIME générique sous-types ("video/*", "text/*", etc.) mais à ce stade, je n'ai pas trouvé d'exemple d'Intent avec plus d'un ensemble de types MIME spécifique (exemple: "application/pdf" et "text/valeurs séparées par des virgules ").   Donc, j'ai créé une méthode de test en utilisant "*/*" comme type MIME en espérant que cela ferait l'affaire.   Malheureusement, ma méthode de test ne va même pas assez loin pour activer la fenêtre de partage Bluetooth pour sélectionner un appareil à proximité.

Je ne suis pas sûr de ce que je fais mal ou ai omis.   Je n'arrive pas à piéger les erreurs pendant le débogage, donc je suppose qu'il me manque encore quelque chose.   Je connais les fichiers PDF et CSV et leur URI sont OK respectifs parce que les deux fichiers transmettent bien par la méthode originale (j'ai changé le type MIME et URI sur la méthode existante pour tester le nouveau fichier CSV.)  

ici est ma méthode de test:

public static void shareTwoFilesTest(Context ctx, String pathAndFile, String pathAndFile2) { 
    try { 
     Intent share = new Intent(Intent.ACTION_SEND_MULTIPLE); 

     share.setPackage("com.android.bluetooth"); 
     share.setType("*/*"); 
     share.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathAndFile)); 
     share.putExtra(Intent.EXTRA_STREAM, Uri.parse(pathAndFile2)); 
     share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     ctx.startActivity(share); 
    } catch (Exception e) { 
     ExceptionDAO.Log(CATEGORY.SHARE_INTENT, e, ctx, e.getMessage(), true); 
    } 
} 

Répondre

1

J'ai fini par trouver une solution de travail à ma question/problème juste après avoir fini mon brouillon final.   J'ai continué à rechercher le problème en écrivant et trouvé this answer qui a indiqué que je manquais intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); dans ma méthode de test.   J'ai ajouté cela mais ma méthode de test ne fonctionnait toujours pas.

J'ai ensuite trouvé this answer indiquant que peut-être je devrais ajouter une liste de tableau d'URI à mon intention plutôt que d'essayer d'ajouter plusieurs URI uniques.   Après avoir ajouté cette dernière pièce manquante je me suis retrouvé avec une fonction de test de travail que je peux maintenant mettre en œuvre officiellement:

public static void shareTwoFilesTest(Context ctx, String pathAndFile, String pathAndFile2) { 

    ArrayList<Uri> Uris = new ArrayList<>(); 
    Uris.add(Uri.parse(pathAndFile)); 
    Uris.add(Uri.parse(pathAndFile2)); 

    try { 
     Intent share = new Intent(Intent.ACTION_SEND_MULTIPLE); 

     share.setPackage("com.android.bluetooth"); 
     share.setType("*/*"); 
     share.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); 
     share.putExtra(Intent.EXTRA_STREAM, Uris); 
     share.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     ctx.startActivity(share); 
    } catch (Exception e) { 
     ExceptionDAO.Log(CATEGORY.SHARE_INTENT, e, ctx, e.getMessage(), true); 
    } 
} 

Si vous pensez que cette réponse pourrait être améliorée ou une autre façon de résoudre la question, s'il vous plaît ne hésitez pas à répondre ou commenter comme bon vous semble.   Je suis allé de l'avant et posté la question et ma réponse afin que, espérons-le, cela peut aider quelqu'un d'autre à l'avenir.

+0

Merci, fonctionne très bien pour partager plusieurs fichiers –