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);
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);
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 :)
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".
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
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);
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");
}
}