클라이언트 앱이 콘텐츠 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) } ...
자바
... /* * 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
클래스에는
다음을 반환하는 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() ... }
자바
... /* * 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))); ...
추가 관련 정보는 다음을 참조하세요.