it-swarm.com.de

Wie PDF und Text über WhatsApp in Android zu teilen?

Ich habe es mit dem folgenden Code versucht, aber er hängt die PDF-Datei nicht an.

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

Ich hatte dieses Problem, bei dem ich versuchte, eine PDF-Datei aus dem Assets-Ordner zu öffnen, und ich habe nicht funktioniert, aber als ich versuchte, den Download-Ordner zu öffnen (zum Beispiel), hat es tatsächlich funktioniert, und hier ist ein Beispiel:

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

Hinweis Wenn Ihre targetSdkVersion 24 oder höher ist, müssen Sie die FileProvider-Klasse verwenden, um Zugriff auf die bestimmte Datei oder den Ordner zu gewähren, um sie für andere Apps zugänglich zu machen. 

Schritt 1: Füge ein FileProvider-Tag in AndroidManifest.xml unter dem Anwendungs-Tag hinzu.

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

Schritt 2:

erstellen Sie dann eine Datei provider_paths.xml im Ordner xml unter dem Ordner res. Möglicherweise wird ein Ordner zum Erstellen benötigt, wenn er nicht vorhanden ist. Der Inhalt der Datei wird unten gezeigt. Es beschreibt, dass wir den Zugriff auf den externen Speicher im Stammverzeichnis (Pfad = ".") Mit dem Namen external_files freigeben möchten. 

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

Schritt 3: Der letzte Schritt ist das Ändern der Codezeile in

Uri photoURI = Uri.fromFile(outputFile);

zu

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

Schritt 4 (optional) :

Wenn Sie das System mit einer Absicht dazu bringen, Ihre Datei zu öffnen, müssen Sie möglicherweise die folgende Codezeile hinzufügen:

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

Hoffe das wird helfen :)

10
Idris Bohra

ACTION_VIEW dient zum Anzeigen von Dateien. ACTION_VIEW öffnet Apps, die PDF-Dateien in der Liste verarbeiten können.

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

Ich dachte, die Absicht ACTION_SEND würde "an andere App senden" und nicht "anderswo senden" bedeuten.

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

Versuchen Sie, Intent.setType wie folgt hinzuzufügen: -

    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

Im Folgenden finden Sie ein gutes Beispiel für die Weitergabe von Text. Hier können Sie Text mit einer bestimmten Nummer teilen, wenn Sie möchten!

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