Mitglieder surfen ohne Werbung: Jetzt kostenlos registrieren!

PDF Datei durch Intent öffnen lassen

  • 8 Antworten
  • Neuester Beitrag
Diskutiere PDF Datei durch Intent öffnen lassen im Android App Entwicklung im Bereich Betriebssysteme & Apps.
J

JoEntwickler

Ambitioniertes Mitglied
Hallo,

ich habe eine App die einen Export als PDF erstellt. Diese PDF soll dann direkt über eine andere App per Intent geöffnet werden können.
Meine Methode dafür ist so:
Java:
public static void openFile(File file, String type, Context context) {
        Uri uri;
        if (Build.VERSION.SDK_INT >= 24) {
            uri = FileProvider.getUriForFile(context,
                    context.getPackageName() + ".provider", file);
        } else {
            uri = Uri.fromFile(file);
        }
        Intent target = new Intent(Intent.ACTION_VIEW);
        target.setDataAndType(uri,type);
        target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        try {
            context.startActivity(Intent.createChooser(target, context.getResources().getString(R.string.openPdf)));
        } catch (ActivityNotFoundException e) {
            // Instruct the user to install a PDF reader here, or something
        }
    }
Als Type wird: application/pdf angegeben.

Ich habe ein Handy mit Android 9 und der Intentchooser wird geöffnet. Wenn ich dann aber die App auswähle die die PDF öffnen soll zeigt diese App ein Fehler an.

Kann mir da jemand helfen?
 
J

jogimuc

Stammgast
Hallo
Frage wo ist den die Datei gespeichert? Hast du auch die Rechte auf den Speicherbereich?

Welcher Fehler kommt den bitte Error Log.
 
Zuletzt bearbeitet:
J

JoEntwickler

Ambitioniertes Mitglied
Hi,
also die Datei liegt im Handyspeicher unter /Documents. Der Ordner wird erstellt wenn er nicht existiert.
Die Rechte auf den Speicher sind eingeholt.
Einene Fehler konnte ich mir bisher nicht anzeigen lassen. Wenn ich das über den Google Drive PDF Viewer anzeigen lassen möchte steht der Dateiname oben drin. Aber es wird sonst nichts angezeigt.
Die PDF ist auch nicht kaputt oder so. Wenn ich sie im Dateisystem suche und öffne funktioniert es wie es soll. Nur das Öffnen per Intent geht irgendwie nicht.
 
J

JoEntwickler

Ambitioniertes Mitglied
Funktioniert leider nicht.

provider_paths.xml
XML:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path name="external_files" path="."/>
</paths>
Manifest.xml Eintrag
XML:
<provider
            android:name=".helpers.GenericFileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true"
            tools:replace="android:authorities">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"
                tools:replace="android:resource"/>
        </provider>
Und so ist meine Öffnen Methode.
Java:
public static void openFile(File file, String type, Activity context) {
        Uri uri;
        if (Build.VERSION.SDK_INT >= 24) {
            uri = FileProvider.getUriForFile(context,
                context.getPackageName() + ".provider", file);
        } else {
            uri = Uri.fromFile(file);
        }
        Intent target = new Intent(Intent.ACTION_VIEW);
        target.setDataAndType(uri, type);
        target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
        try {
            context.startActivity(Intent.createChooser(target, context.getResources().getString(R.string.openPdf)));
        } catch (ActivityNotFoundException e) {
            // Instruct the user to install a PDF reader here, or something
        }
    }
Es funktioniert aber leider immer noch nicht.
 
J

jogimuc

Stammgast
Hallo
Für Androidx etwa so.

android:name="androidx.core.content.FileProvider

Schaue meinen dritten link.

Du bekommst bestimmt eine Fehlermeldung im log.
 
J

JoEntwickler

Ambitioniertes Mitglied
Wo genau kann ich denn den log sehen? Ich wähle eine App aus die die PDF öffnen soll und von dieser App aus kommt doch dann der Fehler. Oder habe ich das falsch verstanden?
 
J

jogimuc

Stammgast
Hallo ich würde hier trotzdem behaupten dass es ein Rechte Premission Problem ist.
Die Uri an sich scheit zu stimmen denn den Datei nahmen bekommt die externe App ja.
Um genau zu sein scheit es mir Probleme mit der UriPermission zu geben.

Die setzt du nicht im Java Code. Im Provider sagt du das die externe App eine braucht du gibst ihr aber keine.

manifest
android:grantUriPermissions="true"

tools:replace="android:authorities" sollte weg


java

Code:
public static void openFile(File file, String type, Activity context) {
        Uri uri;
        if (Build.VERSION.SDK_INT >= 24) {
      
            uri = FileProvider.getUriForFile(context,
                context.getPackageName() + ".provider", file);
        } else {
            uri = Uri.fromFile(file);
        }
        Intent target = new Intent(Intent.ACTION_VIEW);
        target.setDataAndType(uri, type);
        target.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      
        try {
            context.startActivity(Intent.createChooser(target, context.getResources().getString(R.string.openPdf)));
        } catch (ActivityNotFoundException e) {
            // Instruct the user to install a PDF reader here, or something
        }
    }
https://developer.android.com/refer...ssion(java.lang.String, android.net.Uri, int)
https://developer.android.com/reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION
 
Zuletzt bearbeitet:
J

JoEntwickler

Ambitioniertes Mitglied
Ja jetzt gehts. Das mit den URIs musste ich erstmal verstehen.

Vielen Dank für die Hilfe und dir noch ein schönes Wochenende