Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mengambil informasi file

Sebelum aplikasi klien mencoba bekerja dengan file yang memiliki URI konten, aplikasi tersebut bisa meminta informasi tentang file dari aplikasi server, termasuk jenis data file dan ukuran file. Jenis data akan membantu aplikasi klien menentukan apakah aplikasi dapat menangani file, dan ukuran file membantu aplikasi klien menyiapkan buffering dan cache untuk file tersebut.

Tutorial ini menunjukkan cara meminta FileProvider aplikasi server untuk mengambil jenis dan ukuran MIME file.

Mengambil jenis file MIME

Jenis data file menunjukkan kepada aplikasi klien bagaimana konten file harus ditangani. Untuk mendapatkan jenis data file bersama yang diberikan URI kontennya, aplikasi klien akan memanggil ContentResolver.getType(). Metode ini akan mengembalikan jenis MIME file. Secara default, FileProvider menentukan jenis MIME file dari ekstensi nama file-nya.

Cuplikan kode berikut menunjukkan cara aplikasi klien mengambil jenis MIME file setelah aplikasi server mengembalikan URI konten ke klien:

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);
        ...
    

Mengambil nama dan ukuran file

Class FileProvider memiliki implementasi default untuk metode query() yang menampilkan nama dan ukuran file yang terkait dengan URI konten di Cursor. Implementasi default menampilkan dua kolom:

DISPLAY_NAME
Nama file, sebagai String. Nilai ini sama dengan nilai yang ditampilkan oleh File.getName().
SIZE
Ukuran file dalam byte, sebagai long. Nilai ini sama dengan nilai yang ditampilkan oleh File.length()

Aplikasi klien bisa mendapatkan DISPLAY_NAME dan SIZE untuk file dengan menetapkan semua argumen query() ke null kecuali untuk URI konten. Misalnya, cuplikan kode ini mengambil DISPLAY_NAME dan SIZE file serta menampilkannya di TextView secara terpisah:

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)));
        ...
    

Untuk informasi terkait lainnya, lihat: