API 26 Intent mit ACTION_VIEW und FileProvider geht nicht

E

enrem

Erfahrenes Mitglied
Threadstarter
Hallo zusammen,

nach der Umstellung auf API26 kann ich die Excel-Dateien nicht mehr mit ACTION_VIEW öffnen.

Von „OfficeDocuments“ kommt die Meldung „Es scheint das die Seite nicht korrekt dargestellt werden konnte“.

Von „Excel“ kommt die Meldung „Datei kann nicht geöffnet werden“.

Ich gehe mal davon aus, dass der Pfad stimmt, denn ändere ich ACTION_VIEW auf ACTION_SEND, kann ich die ausgewählte Datei bspw. per eMail versenden.

Hat jemand eine Ahnung woran das liegen kann? Muss ich im Manifest evtl. noch eine Permission setzten damit ich die Excel-Dateien mit fremden Apps öffnen kann?

Hier mal mein Code.

Code:
private void openFile(final String filename) {

        //Inhalt von filename
        //filename = /storage/emulated/0/stundenbuch/xls/aa_stb20180528_151116.xls

        File myfile = new File(filename);

        //Zum auffinden der passenden App
        MimeTypeMap myMime = MimeTypeMap.getSingleton();
        String mimeType = myMime.getMimeTypeFromExtension(fileExt(filename));

         //Mit ACTION_SEND geht es
        Intent i = new Intent(Intent.ACTION_VIEW);

        i.setType(mimeType);

        i.putExtra(Intent.EXTRA_SUBJECT, "Wähle...");

        //Eine Uri erzeugen. Autorisierung siehe Manifest provider
        Uri uriFile = FileProvider.getUriForFile(this,
                "de.meine.domain.fileprovider",
                myfile);

        //Inhalt von uriFile
        //uriFile = content://de.meine.domain.fileprovider/external_files/stundenbuch/xls/aa_stb20180528_151116.xls

        i.putExtra(Intent.EXTRA_STREAM, uriFile);
        i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

        try {
            startActivity(Intent
                    .createChooser(i, "öffnen..."));

        } catch (ActivityNotFoundException ex) {
            Toast.makeText(getApplicationContext(),
                    "Fehler...", Toast.LENGTH_SHORT)
                    .show();
        }

    }
Hier ein Auszug meiner Logcat (Filter auf Error).

08-14 13:33:36.661 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:36.899 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:37.098 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:37.187 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:37.188 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:37.298 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:37.417 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:37.476 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:38.259 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:38.454 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5
08-14 13:33:38.542 25770-25861/? E/eglCodecCommon: glUtilsParamSize: unknow param 0x000085b5

Würde mich über ein paar Tipps freuen,
Vorab besten Dank.
 
J

jogimuc

Erfahrenes Mitglied
Hallo erstmal eine Frage von welcher API hast du umgestellt ?
Vor 23 oder danach?
Ab API 23 brauchst du auch die Premission zur laufzeit die im Manifest reicht da nicht mehr.
 
E

enrem

Erfahrenes Mitglied
Threadstarter
Hallo,

das war vor API 23. Ich meine es war API 19.

Nachtrag Problem gelöst:

statt i.putExtra(Intent.EXTRA_STREAM, uriFile) habe ich i.setDataAndType(uriFile, mimeType) verwendet und nun geht es.

Trotzdem vielen Dank für die Mühe.
 
Zuletzt bearbeitet:
J

jogimuc

Erfahrenes Mitglied
Ok nur wo speicherst du deine Datei ?
Denke drann wenn du auf die Sdkarte intern oder exten willst brauchst du die Laufzeit Permission.
 
E

enrem

Erfahrenes Mitglied
Threadstarter
Die Datei liegt hier:

File myfile = new File("/storage/emulated/0/stundenbuch/xls/aa_stb20180528_151116.xls");

Die Uri erzeuge ich mit meinem FileProvider:

Uri uriFile = FileProvider.getUriForFile(this,"de.meine.domain.fileprovider", myfile);

Der Inhalt der Uri sieht dann so aus:

"content://de.meine.domain.fileprovider/external_files/stundenbuch/xls/aa_stb20180528_151116.xls"

Die Permission setze ich beim Intent so:

i.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Android 9 (Virtualmaschine) und Android 8 (mein Smartphone), dort kann ich die xls-Datei erfolgreich erzeugen, versenden und öffnen. Bilder mit der Kamera machen geht nun auch Dank des FileProviders.

Ich muss gestehen, dass ich es mit dem FileProvider noch nicht so ganz gerafft habe.

So sieht mein FilePath in der xls-Datei aus:

Code:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
    <external-path
        name="external_files"
        path="."/>
</paths>
Ich vermute mal das die uri den Teil der Domain hier rot "content://de.meine.domain.fileprovider/external_files/stundenbuch/xls/aa_stb20180528_151116.xls" mit "." ersetzt wird.
 
Zuletzt bearbeitet:
Oben Unten