파일 정보 가져오기

클라이언트 앱이 콘텐츠 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_NAMESIZE를 모두 가져올 수 있습니다. 인수 query()null(콘텐츠 URI 제외) 예를 들어 이 코드 스니펫은 파일의 DISPLAY_NAMESIZE로 각각 별도로 표시 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)));
    ...

추가 관련 정보는 다음을 참조하세요.