Bir istemci uygulaması, içerik URI'sine sahip olduğu bir dosyayla çalışmaya başlamadan önce sunucu uygulamasından dosya hakkında bilgi istemesi (dosyanın veri türü ve dosya boyutu. Veri türü, istemci uygulamasının dosyayı işleyip işleyemediğini belirlemesine yardımcı olur ve dosya boyutu, istemci uygulamasının dosya için arabelleğe alma ve önbelleğe alma ayarlarını yapmasına yardımcı olur.
Bu ders, sunucu uygulamasının
Dosyanın MIME türünü ve boyutunu almak için FileProvider
.
Bir dosyanın MIME türünü alma
Bir dosyanın veri türü, istemci uygulamasına dosyanın içeriğini nasıl işlemesi gerektiğini belirtir. Şunları almak için:
içerik URI'sine göre paylaşılan bir dosyanın veri türü; istemci uygulaması
ContentResolver.getType()
Bu yöntem,
dosyanın MIME türüne göre değişir. Varsayılan olarak
FileProvider
, dosyanın MIME türünü
dosya adı uzantısı.
Aşağıdaki kod snippet'i, bir istemci uygulamasının bir dosyanın MIME türünü bir kez nasıl aldığını gösterir sunucu uygulaması istemciye içerik URI'sini döndürdü:
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); ...
Dosyanın adını ve boyutunu alma
FileProvider
sınıfı, varsayılan olarak
şunu döndüren query()
yöntemi:
bir içerik URI'sıyla ilişkilendirilmiş dosyanın adı ve boyutu
Cursor
. Varsayılan uygulama iki sütun döndürür:
DISPLAY_NAME
- .
String
olarak dosyanın adı. Bu değer, döndürülen değerle aynıFile.getName()
tarafından. SIZE
- .
long
olarak dosyanın bayt cinsinden boyutu. Bu değer,File.length()
tarafından iade edildi
İstemci uygulaması, tümünü ayarlayarak bir dosya için hem DISPLAY_NAME
hem de SIZE
alabilir
query()
,
İçerik URI'si hariç null
. Örneğin, bu kod snippet'i bir dosyanın
DISPLAY_NAME
ve
SIZE
ve her birini ayrı
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))); ...
Daha fazla ilgili bilgi için aşağıdaki kaynakları inceleyebilirsiniz: