web-dev-qa-db-fra.com

Comment partager des fichiers PDF et texte via WhatsApp dans Android?

J'ai essayé avec le code suivant mais il ne joint pas le fichier pdf.

Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, message);
        sendIntent.setType("text/plain");
        if (isOnlyWhatsApp) {
            sendIntent.setPackage("com.whatsapp");

        }

        Uri uri = Uri.fromFile(attachment);
        sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
        activity.startActivity(sendIntent);
6
Sujeet Kumar Mehta

J'ai eu ce problème où j'essayais d'ouvrir un fichier pdf à partir du dossier assets et je ne travaillais pas, mais lorsque j'ai essayé d'ouvrir à partir du dossier Download (par exemple), cela a fonctionné et voici un exemple:

File outputFile = new File(Environment.getExternalStoragePublicDirectory
    (Environment.DIRECTORY_DOWNLOADS), "example.pdf");
Uri uri = Uri.fromFile(outputFile);

Intent share = new Intent();
share.setAction(Intent.ACTION_SEND);
share.setType("application/pdf");
share.putExtra(Intent.EXTRA_STREAM, uri);
share.setPackage("com.whatsapp");

activity.startActivity(share);      
17
KHALED

Remarque Si votre targetSdkVersion est supérieure ou égale à 24, nous devons utiliser la classe FileProvider pour donner accès au fichier ou au dossier concerné et les rendre accessibles à d'autres applications. 

Étape 1: ajoutez une balise FileProvider dans AndroidManifest.xml sous la balise application.

<provider
            Android:name="Android.support.v4.content.FileProvider"
            Android:authorities="${applicationId}.provider"
            Android:exported="false"
            Android:grantUriPermissions="true">
            <meta-data
                Android:name="Android.support.FILE_PROVIDER_PATHS"
                Android:resource="@xml/provider_paths"/>
        </provider>

Étape 2:

créez ensuite un fichier provider_paths.xml dans le dossier XML sous le dossier res. Un dossier peut être nécessaire pour créer s'il n'existe pas. Le contenu du fichier est présenté ci-dessous. Il indique que nous souhaitons partager l’accès au stockage externe dans le dossier racine (path = ".") Sous le nom external_files. 

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <external-path name="external_files" path="."/>
</paths>

étape 3: / La dernière étape consiste à changer la ligne de code ci-dessous dans

Uri photoURI = Uri.fromFile(outputFile);

à

Uri uri = FileProvider.getUriForFile(PdfRendererActivity.this, PdfRendererActivity.this.getPackageName() + ".provider", outputFile);

étape 4 (facultatif) :

Si vous utilisez l'intention de faire en sorte que votre système ouvre votre fichier, vous devrez peut-être ajouter la ligne de code suivante:

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

J'espère que ça va aider :)

10
Idris Bohra

ACTION_VIEW est destiné à l'affichage des fichiers. ACTION_VIEW ouvrira des applications pouvant gérer des fichiers PDF dans la liste.

startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(reportFile), "application/pdf")));

Je pensais que ACTION_SEND intent voudrait dire "envoyer à une autre application" et non "envoyer ailleurs".

1
Rahul Khurana
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                pdfUri = FileProvider.getUriForFile(this, this.getPackageName() + ".provider", pdfFile);
            } else {
                pdfUri = Uri.fromFile(pdfFile);
            }
            Intent share = new Intent();
            share.setAction(Intent.ACTION_SEND);
            share.setType("application/pdf");
            share.putExtra(Intent.EXTRA_STREAM, pdfUri);
            startActivity(Intent.createChooser(share, "Share"));

If you are using Intent.createChooser then always open chooser 
1
Dishant Kawatra

Essayez d’ajouter Intent.setType comme suit: -

    Intent sendIntent = new Intent();
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_TEXT, message);
    // sendIntent.setType("text/plain");
    if (isOnlyWhatsApp) {
        sendIntent.setPackage("com.whatsapp");
    }

    Uri uri = Uri.fromFile(attachment);
    sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
    sendIntent.setType("application/pdf");
    activity.startActivity(sendIntent);
0
Rishabh Dutt Sharma

Pour le partage de texte, vous trouverez ci-dessous un bon exemple, dans lequel vous pouvez partager du texte avec un numéro spécifique si vous le souhaitez!

public static void openWhatsAppConversation(Activity activity, String number) {
    boolean isWhatsappInstalled = isAppInstalled(activity, "com.whatsapp");
    if (isWhatsappInstalled) {
        Uri uri = Uri.parse("smsto:" + number);
        Intent sendIntent = new Intent(Intent.ACTION_SENDTO, uri);
        sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        sendIntent.setPackage("com.whatsapp");
        activity.startActivity(sendIntent);
    } else {
        ToastHelper.show(activity, "WhatsApp is not Installed!");
        openMarket(activity, "com.whatsapp");
    }
}
0
KHALED