private val PICK_FILE_REQUEST_CODE = 0x100
...
fun openFilePicker() {
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "*/*"
//intent.type = "text/plain"
//intent.type = "text/html"
//intent.type = "image/*"
//intent.type = "image/jpeg"
//intent.type = "image/png"
//intent.type = "audio/*"
//intent.type = "audio/mpeg"
//intent.type = "audio/ogg"
//intent.type = "video/*"
//intent.type = "video/mp4"
//intent.type = "application/pdf"
//intent.type = "application/octet-stream"
startActivityForResult(Intent.createChooser(intent, "Choose File"), PICK_FILE_REQUEST_CODE)
}
Su uso llamar openFilePicker()
Los datos se reciben en onActivityResult
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == PICK_FILE_REQUEST_CODE && resultCode == RESULT_OK) {
val selectedFile = data?.data //The uri with the location of the file
Log.d(TAG, "onActivityResult: selectedFile= [$selectedFile]")
processURI(selectedFile)
}
Al seleccionar un documento/imagen etc.. se recibe algo asi
content://com.android.providers.downloads.documents/document/7562
fun processURI(uri: Uri) {
Log.i(TAG, "$uri")
if (uri.scheme.equals("content")) {
if (!DocumentsContract.isDocumentUri(this, uri)) return
val cursor: Cursor? = contentResolver.query(uri, null, null, null, null)
cursor.use { c ->
if (c != null && c.moveToFirst()) {
val fileUID = c.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_DOCUMENT_ID)
val fileMineType = c.getString(c.getColumnIndex(DocumentsContract.Document.COLUMN_MIME_TYPE))
val displayName = c.getString(c.getColumnIndex(OpenableColumns.DISPLAY_NAME))
//val fileFSummary = c.getString(c.getColumnIndex(DocumentsContract.Document.COLUMN_SUMMARY))
val fileSize = c.getLong(c.getColumnIndex(OpenableColumns.SIZE))
val fileDateModified = Date(c.getLong(c.getColumnIndex(DocumentsContract.Document.COLUMN_LAST_MODIFIED)))
//val fileIcon = c.getString(c.getColumnIndex(DocumentsContract.Document.COLUMN_ICON))
val fileFlags = c.getInt(c.getColumnIndex(DocumentsContract.Document.COLUMN_FLAGS))
Log.d(TAG, "fileUID: $fileUID ")
Log.d(TAG, "fileMineType: $fileMineType ")
Log.d(TAG, "displayName: $displayName ")
//Log.d(TAG, "fileFSummary: $fileFSummary ")
Log.d(TAG, "fileSize: $fileSize ")
Log.d(TAG, "fileDateModified: $fileDateModified ")
//Log.d(TAG, "fileIcon: $fileIcon ")
Log.d(TAG, "fileFlags: $fileFlags ")
//https://developer.android.com/reference/android/provider/DocumentsContract.Document
if (fileFlags and DocumentsContract.Document.FLAG_SUPPORTS_DELETE != 0) {
Log.d(TAG, "FLAG_SUPPORTS_DELETE")
}
if (fileFlags and DocumentsContract.Document.FLAG_SUPPORTS_MOVE != 0) {
Log.d(TAG, "FLAG_SUPPORTS_MOVE")
}
if (fileFlags and DocumentsContract.Document.FLAG_SUPPORTS_WRITE != 0) {
Log.d(TAG, "FLAG_SUPPORTS_WRITE")
}
//val extension = File(displayName).extension
//Log.d(TAG, "extension: $extension")
val baseName: String = if (displayName.contains(".")) {
displayName.substring(0, displayName.lastIndexOf('.'))
} else displayName
Log.d(TAG, "baseName: $baseName")
val extension: String? = if (displayName.contains(".")) {
displayName.substring(displayName.lastIndexOf("."))
} else null
Log.d(TAG, "extension: $extension")
/*Log.d(TAG, "uri.authority: " + uri.authority)
Log.d(TAG, "uri.host: " + uri.host)
Log.d(TAG, "uri.path: " + uri.path)
Log.d(TAG, "uri.query: " + uri.query)
Log.d(TAG, "uri.scheme: " + uri.scheme)*/
}
}
}
}
```
### Debug de las columnas de un content provider
```kotlin
fun debugContentProvider(uri: Uri) {
Log.i(TAG,"uri= $uri"
val cursor: Cursor? = contentResolver.query(uri, null, null, null, null)
cursor.use { c ->
if (c != null && c.moveToFirst()) {
c.columnNames.forEach {
Log.d(TAG, "columnName: $it")
}
}
}
cursor?.close()
}
Archivo obtenido de la galeria de un Tableta Samsung
D/MainActivity: columnNames: _id
D/MainActivity: columnNames: _data
D/MainActivity: columnNames: _size
D/MainActivity: columnNames: _display_name
D/MainActivity: columnNames: mime_type
D/MainActivity: columnNames: title
D/MainActivity: columnNames: date_added
D/MainActivity: columnNames: date_modified
D/MainActivity: columnNames: description
D/MainActivity: columnNames: picasa_id
D/MainActivity: columnNames: isprivate
D/MainActivity: columnNames: latitude
D/MainActivity: columnNames: longitude
D/MainActivity: columnNames: datetaken
D/MainActivity: columnNames: orientation
D/MainActivity: columnNames: mini_thumb_magic
D/MainActivity: columnNames: bucket_id
D/MainActivity: columnNames: bucket_display_name
D/MainActivity: columnNames: width
D/MainActivity: columnNames: height
D/MainActivity: columnNames: group_id
D/MainActivity: columnNames: spherical_mosaic
D/MainActivity: columnNames: addr
D/MainActivity: columnNames: langagecode
D/MainActivity: columnNames: is_secretbox
D/MainActivity: columnNames: weather_ID
D/MainActivity: columnNames: sef_file_type
D/MainActivity: columnNames: reusable
D/MainActivity: columnNames: is_drm
D/MainActivity: columnNames: is_favorite
D/MainActivity: columnNames: sef_file_sub_type
D/MainActivity: columnNames: smartcrop_rect
D/MainActivity: columnNames: is_hide
D/MainActivity: columnNames: cloud_server_id
Obteniendo un video de una Tableta Samsung
Uri content://media/external/video/media/1751
D/MainActivity: columnNames: _id
D/MainActivity: columnNames: _data
D/MainActivity: columnNames: _display_name
D/MainActivity: columnNames: _size
D/MainActivity: columnNames: mime_type
D/MainActivity: columnNames: date_added
D/MainActivity: columnNames: date_modified
D/MainActivity: columnNames: title
D/MainActivity: columnNames: duration
D/MainActivity: columnNames: artist
D/MainActivity: columnNames: album
D/MainActivity: columnNames: resolution
D/MainActivity: columnNames: description
D/MainActivity: columnNames: isprivate
D/MainActivity: columnNames: tags
D/MainActivity: columnNames: category
D/MainActivity: columnNames: language
D/MainActivity: columnNames: mini_thumb_data
D/MainActivity: columnNames: latitude
D/MainActivity: columnNames: longitude
D/MainActivity: columnNames: datetaken
D/MainActivity: columnNames: mini_thumb_magic
D/MainActivity: columnNames: bucket_id
D/MainActivity: columnNames: bucket_display_name
D/MainActivity: columnNames: bookmark
D/MainActivity: columnNames: width
D/MainActivity: columnNames: height
D/MainActivity: columnNames: resumePos
D/MainActivity: columnNames: isPlayed
D/MainActivity: columnNames: addr
D/MainActivity: columnNames: langagecode
D/MainActivity: columnNames: is_secretbox
D/MainActivity: columnNames: weather_ID
D/MainActivity: columnNames: is_360_video
D/MainActivity: columnNames: recordingtype
D/MainActivity: columnNames: recording_mode
D/MainActivity: columnNames: type3dvideo
D/MainActivity: columnNames: is_drm
D/MainActivity: columnNames: is_favorite
D/MainActivity: columnNames: video_view_mode
D/MainActivity: columnNames: video_codec_info
D/MainActivity: columnNames: audio_codec_info
D/MainActivity: columnNames: is_hide
D/MainActivity: columnNames: cloud_server_id
D/MainActivity: columnNames: is_hdr10_video
Obteniendo un mp3 de una tableta Samsung
uri content://media/external/audio/media/14
D/MainActivity: columnNames: _id
D/MainActivity: columnNames: _data
D/MainActivity: columnNames: _display_name
D/MainActivity: columnNames: _size
D/MainActivity: columnNames: mime_type
D/MainActivity: columnNames: date_added
D/MainActivity: columnNames: is_drm
D/MainActivity: columnNames: date_modified
D/MainActivity: columnNames: title
D/MainActivity: columnNames: title_key
D/MainActivity: columnNames: duration
D/MainActivity: columnNames: artist_id
D/MainActivity: columnNames: composer
D/MainActivity: columnNames: album_id
D/MainActivity: columnNames: track
D/MainActivity: columnNames: year
D/MainActivity: columnNames: is_ringtone
D/MainActivity: columnNames: is_music
D/MainActivity: columnNames: is_alarm
D/MainActivity: columnNames: is_notification
D/MainActivity: columnNames: is_podcast
D/MainActivity: columnNames: bookmark
D/MainActivity: columnNames: album_artist
D/MainActivity: columnNames: is_sound
D/MainActivity: columnNames: year_name
D/MainActivity: columnNames: genre_name
D/MainActivity: columnNames: recently_played
D/MainActivity: columnNames: most_played
D/MainActivity: columnNames: recently_added_remove_flag
D/MainActivity: columnNames: is_favorite
D/MainActivity: columnNames: bucket_id
D/MainActivity: columnNames: bucket_display_name
D/MainActivity: columnNames: title_search_key
D/MainActivity: columnNames: title_pinyin
D/MainActivity: columnNames: composer_pinyin
D/MainActivity: columnNames: genre_name_pinyin
D/MainActivity: columnNames: _display_name_pinyin
D/MainActivity: columnNames: bucket_display_name_pinyin
D/MainActivity: columnNames: recordingtype
D/MainActivity: columnNames: latitude
D/MainActivity: columnNames: longitude
D/MainActivity: columnNames: addr
D/MainActivity: columnNames: langagecode
D/MainActivity: columnNames: is_secretbox
D/MainActivity: columnNames: is_memo
D/MainActivity: columnNames: label_id
D/MainActivity: columnNames: weather_ID
D/MainActivity: columnNames: sampling_rate
D/MainActivity: columnNames: bit_depth
D/MainActivity: columnNames: recorded_number
D/MainActivity: columnNames: recording_mode
D/MainActivity: columnNames: is_ringtone_theme
D/MainActivity: columnNames: is_notification_theme
D/MainActivity: columnNames: is_alarm_theme
D/MainActivity: columnNames: datetaken
D/MainActivity: columnNames: artist_id:1
D/MainActivity: columnNames: artist_key
D/MainActivity: columnNames: artist
D/MainActivity: columnNames: album_id:1
D/MainActivity: columnNames: album_key
D/MainActivity: columnNames: album
https://stackoverflow.com/questions/19513556/select-multiple-files-with-intent-action-get-content https://github.com/androidbuffer/Kotlinfilepicker/blob/master/kotlinfilepicker/src/main/java/com/androidbuffer/kotlinfilepicker/KotUtil.kt https://stackoverflow.com/questions/18590514/loading-all-the-images-from-gallery-into-the-application-in-android https://www.grokkingandroid.com/android-tutorial-content-provider-basics/ https://stackoverflow.com/questions/18590514/loading-all-the-images-from-gallery-into-the-application-in-android