PDF Datei durch Intent öffnen lassen

J

JoEntwickler

Fortgeschrittenes Mitglied
5
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?
 
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:
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.
 
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.
 
Hallo
Für Androidx etwa so.

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

Schaue meinen dritten link.

Du bekommst bestimmt eine Fehlermeldung im log.
 
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?
 
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:
Ja jetzt gehts. Das mit den URIs musste ich erstmal verstehen.

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

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
137
swa00
swa00
S
Antworten
33
Aufrufe
2.676
Sempervivum
S
B
Antworten
4
Aufrufe
496
bb321
B
Zurück
Oben Unten