Dateiinformationen abrufen

Bevor eine Client-App versucht, mit einer Datei zu arbeiten, für die sie einen Inhalts-URI aufweist, kann die App Informationen über die Datei von der Serveranwendung anfordern, einschließlich Datentyp und Dateigröße. Anhand des Datentyps kann die Client-App feststellen, ob sie die Datei verarbeiten kann. Dateigröße lässt die Client-App das Zwischenspeichern und Caching der Datei einfacher einrichten.

In dieser Lektion wird gezeigt, wie Sie FileProvider, um den MIME-Typ und die Größe einer Datei abzurufen.

MIME-Typ einer Datei abrufen

Der Datentyp einer Datei gibt für die Client-App an, wie sie mit dem Inhalt der Datei umgehen soll. Um den Datentyp einer freigegebenen Datei anhand ihres Inhalts-URI angibt, ruft die Client-App ContentResolver.getType() Diese Methode gibt den MIME-Typ der Datei. Standardmäßig wird ein FileProvider bestimmt den MIME-Typ der Datei anhand der Dateiendung.

Das folgende Code-Snippet zeigt, wie eine Client-App den MIME-Typ einer Datei einmal abruft Die Server-App hat den Inhalts-URI an den Client zurückgegeben:

Kotlin

    ...
    /*
     * Get the file's content URI from the incoming Intent, then
     * get the file's MIME type
     */
    val mimeType: String? = returnIntent.data?.let { returnUri ->
        contentResolver.getType(returnUri)
    }
    ...

Java

    ...
    /*
     * Get the file's content URI from the incoming Intent, then
     * get the file's MIME type
     */
    Uri returnUri = returnIntent.getData();
    String mimeType = getContentResolver().getType(returnUri);
    ...

Name und Größe einer Datei abrufen

Die FileProvider-Klasse hat eine Standardimplementierung des query()-Methode, die den Name und Größe der Datei, die einem Inhalts-URI in einer Cursor Die Standardimplementierung gibt zwei Spalten zurück:

DISPLAY_NAME
Der Name der Datei als String. Dieser Wert ist mit dem zurückgegebenen Wert identisch. von File.getName().
SIZE
Die Größe der Datei in Byte als long. Dieser Wert entspricht dem Wert zurückgegeben von File.length()

Die Client-App kann sowohl die DISPLAY_NAME als auch die SIZE für eine Datei abrufen, indem sie alle der Argumente von query() null mit Ausnahme des Inhalts-URI. Mit diesem Code-Snippet wird z. B. der Wert einer Datei DISPLAY_NAME und SIZE und zeigt diese jeweils separat an. TextView:

Kotlin

    /*
     * Get the file's content URI from the incoming Intent,
     * then query the server app to get the file's display name
     * and size.
     */
    returnIntent.data?.let { returnUri ->
        contentResolver.query(returnUri, null, null, null, null)
    }?.use { cursor ->
        /*
         * Get the column indexes of the data in the Cursor,
         * move to the first row in the Cursor, get the data,
         * and display it.
         */
        val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
        val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE)
        cursor.moveToFirst()
        findViewById<TextView>(R.id.filename_text).text = cursor.getString(nameIndex)
        findViewById<TextView>(R.id.filesize_text).text = cursor.getLong(sizeIndex).toString()
        ...
    }

Java

    ...
    /*
     * Get the file's content URI from the incoming Intent,
     * then query the server app to get the file's display name
     * and size.
     */
    Uri returnUri = returnIntent.getData();
    Cursor returnCursor =
            getContentResolver().query(returnUri, null, null, null, null);
    /*
     * Get the column indexes of the data in the Cursor,
     * move to the first row in the Cursor, get the data,
     * and display it.
     */
    int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
    int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
    returnCursor.moveToFirst();
    TextView nameView = (TextView) findViewById(R.id.filename_text);
    TextView sizeView = (TextView) findViewById(R.id.filesize_text);
    nameView.setText(returnCursor.getString(nameIndex));
    sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex)));
    ...

Weitere Informationen finden Sie hier: