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. vonFile.getName().
- SIZE
- 
        Die Größe der Datei in Byte als long. Dieser Wert entspricht dem Wert zurückgegeben vonFile.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:
