מתבצע אחזור של פרטי הקובץ
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
לפני שאפליקציית לקוח מנסה לעבוד עם קובץ שעבורו יש לה URI של תוכן, האפליקציה יכולה
לבקש מידע על הקובץ מאפליקציית השרת, כולל סוג הנתונים של הקובץ
גודל הקובץ. סוג הנתונים עוזר לאפליקציית הלקוח לקבוע אם היא יכולה לטפל בקובץ.
גודל הקובץ עוזר לאפליקציית הלקוח להגדיר את הקובץ בתהליך אגירת נתונים ושמירה במטמון.
השיעור הזה מדגים איך להריץ שאילתות על אפליקציית השרת
FileProvider
כדי לאחזר את הסוג והגודל של MIME של הקובץ.
אחזור סוג MIME של קובץ
סוג הנתונים של הקובץ מציין לאפליקציית הלקוח איך עליו לטפל בתוכן של הקובץ. כדי לקבל
סוג הנתונים של קובץ משותף בהינתן ה-URI של התוכן שלו, אפליקציית הלקוח קוראת
ContentResolver.getType()
השיטה הזאת מחזירה
סוג ה-MIME של הקובץ. כברירת מחדל,
FileProvider
קובע את סוג ה-MIME של הקובץ לפי
.
קטע הקוד הבא מדגים איך אפליקציית לקוח מאחזרת את סוג ה-MIME של קובץ פעם אחת
אפליקציית השרת החזירה את ה-URI של התוכן ללקוח:
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);
...
אחזור שם וגודל של קובץ
במחלקה FileProvider
יש הטמעת ברירת מחדל של
ה-method query()
שמחזירה את
השם והגודל של הקובץ המשויך ל-URI של תוכן
Cursor
. הטמעת ברירת המחדל מחזירה שתי עמודות:
DISPLAY_NAME
-
שם הקובץ, בתור
String
. הערך הזה זהה לערך המוחזר
מאת File.getName()
.
SIZE
-
גודל הקובץ בבייטים,
long
. הערך הזה זהה לערך
הוחזר על ידי File.length()
אפליקציית הלקוח יכולה לקבל גם את DISPLAY_NAME
וגם את SIZE
של קובץ על ידי הגדרה של הכול
של הארגומנטים של query()
עד
null
חוץ מה-URI של התוכן. לדוגמה, קטע הקוד מאחזר
DISPLAY_NAME
והקבוצה
SIZE
, וכל דף מוצג בנפרד
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)));
...
מידע נוסף בנושא זמין במאמרים הבאים:
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[null,null,["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Retrieving file information\n\nBefore a client app tries to work with a file for which it has a content URI, the app can\nrequest information about the file from the server app, including the file's data type and\nfile size. The data type helps the client app to determine if it can handle the file, and the\nfile size helps the client app set up buffering and caching for the file.\n\n\nThis lesson demonstrates how to query the server app's\n[FileProvider](/reference/androidx/core/content/FileProvider) to retrieve a file's MIME type and size.\n\nRetrieve a file's MIME type\n---------------------------\n\n\nA file's data type indicates to the client app how it should handle the file's contents. To get\nthe data type of a shared file given its content URI, the client app calls\n[ContentResolver.getType()](/reference/android/content/ContentResolver#getType(android.net.Uri)). This method returns\nthe file's MIME type. By default, a\n[FileProvider](/reference/androidx/core/content/FileProvider) determines the file's MIME type from its\nfilename extension.\n\n\nThe following code snippet demonstrates how a client app retrieves the MIME type of a file once\nthe server app has returned the content URI to the client: \n\n### Kotlin\n\n```kotlin\n ...\n /*\n * Get the file's content URI from the incoming Intent, then\n * get the file's MIME type\n */\n val mimeType: String? = returnIntent.data?.let { returnUri -\u003e\n contentResolver.getType(returnUri)\n }\n ...\n```\n\n### Java\n\n```java\n ...\n /*\n * Get the file's content URI from the incoming Intent, then\n * get the file's MIME type\n */\n Uri returnUri = returnIntent.getData();\n String mimeType = getContentResolver().getType(returnUri);\n ...\n```\n\nRetrieve a file's name and size\n-------------------------------\n\n\nThe [FileProvider](/reference/androidx/core/content/FileProvider) class has a default implementation of the\n[query()](/reference/android/content/ContentProvider#query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal)) method that returns the\nname and size of the file associated with a content URI in a\n[Cursor](/reference/android/database/Cursor). The default implementation returns two columns:\n\n[DISPLAY_NAME](/reference/android/provider/OpenableColumns#DISPLAY_NAME)\n:\n The file's name, as a [String](/reference/java/lang/String). This value is the same as the value returned\n by [File.getName()](/reference/java/io/File#getName()).\n\n[SIZE](/reference/android/provider/OpenableColumns#SIZE)\n:\n The size of the file in bytes, as a `long` This value is the same as the value\n returned by [File.length()](/reference/java/io/File#length())\n\n\nThe client app can get both the [DISPLAY_NAME](/reference/android/provider/OpenableColumns#DISPLAY_NAME) and [SIZE](/reference/android/provider/OpenableColumns#SIZE) for a file by setting all\nof the arguments of [query()](/reference/android/content/ContentProvider#query(android.net.Uri, java.lang.String[], android.os.Bundle, android.os.CancellationSignal)) to\n`null` except for the content URI. For example, this code snippet retrieves a file's\n[DISPLAY_NAME](/reference/android/provider/OpenableColumns#DISPLAY_NAME) and\n[SIZE](/reference/android/provider/OpenableColumns#SIZE) and displays each one in separate\n[TextView](/reference/android/widget/TextView): \n\n### Kotlin\n\n```kotlin\n /*\n * Get the file's content URI from the incoming Intent,\n * then query the server app to get the file's display name\n * and size.\n */\n returnIntent.data?.let { returnUri -\u003e\n contentResolver.query(returnUri, null, null, null, null)\n }?.use { cursor -\u003e\n /*\n * Get the column indexes of the data in the Cursor,\n * move to the first row in the Cursor, get the data,\n * and display it.\n */\n val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)\n val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE)\n cursor.moveToFirst()\n findViewById\u003cTextView\u003e(R.id.filename_text).text = cursor.getString(nameIndex)\n findViewById\u003cTextView\u003e(R.id.filesize_text).text = cursor.getLong(sizeIndex).toString()\n ...\n }\n```\n\n### Java\n\n```java\n ...\n /*\n * Get the file's content URI from the incoming Intent,\n * then query the server app to get the file's display name\n * and size.\n */\n Uri returnUri = returnIntent.getData();\n Cursor returnCursor =\n getContentResolver().query(returnUri, null, null, null, null);\n /*\n * Get the column indexes of the data in the Cursor,\n * move to the first row in the Cursor, get the data,\n * and display it.\n */\n int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);\n int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);\n returnCursor.moveToFirst();\n TextView nameView = (TextView) findViewById(R.id.filename_text);\n TextView sizeView = (TextView) findViewById(R.id.filesize_text);\n nameView.setText(returnCursor.getString(nameIndex));\n sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex)));\n ...\n```\n\nFor additional related information, refer to:\n\n- [Retrieving Data from the Provider](/guide/topics/providers/content-provider-basics#SimpleQuery)"]]