Skip to content

ParthLotia/FilePicker

Repository files navigation

PhotoPicker

Here is the Demo for the PhotoPicker in All Android Versions

I have added other pickers as well(pdf,doc,video,pictures).

There is no need to add any kind of permission and any library to select File from gallery .

I have tested with multiple scenarios , here is the scenario list

  1. Android 8 to 16 versions
  2. Also Add the Single Photo and Multiple Photo Selection
  3. Single Photo Selection Working on All Android Versions
  4. Multiple Photo Selection will work from Android 11 to Android 16.
  5. Multiple Photo Selection below Android 11 we have to use clipdata the old way.

Here how to use library in your project follow below steps .

  1. In your gradle(app) add below line
 dependencies{ implementation 'com.github.ParthLotia:FilePicker:Tag' } 

Replace your Tag with current version 1.0.9

  1. In your project level gradle add below line
 repositories { google() mavenCentral() maven { url "https://www.jitpack.io" } } 
  1. Add below code in your activity/fragment
 In on create add below lines btn_upload_pick.setOnClickListener { val mimeType = "*/*" /*Single Document Picker*/ // Image , Video , PDF , DOC , DOCX pickMedia.launch( arrayOf(mimeType) ) } Out side on create add below lines of code private val pickMedia = registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri -> if (uri != null) { val file = FileUriUtils.getRealPath(this, uri)?.let { File(it) } if (FileUriUtils.checkExtensionFile(file)) { img_pick.setImageURI(uri) } else { img_pick.setImageBitmap( FileUtil.getThumbnail( file, uri, context = applicationContext ) ) } } else { Log.d("PhotoPicker", "No media selected") } } Here img_pick is an Imageview to display the file you have selected . For Jetpack Compose Button(onClick = { singleFilePickerLauncher.launch(arrayOf("*/*")) }) { Text(text = "Choose File") } val singleFilePickerLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.OpenDocument(), onResult = { uri -> if (uri != null) { file = FileUriUtils.getRealPath(this, uri)?.let { File(it) } if (FileUriUtils.checkExtensionFile(file)) { selectedSingleImageUri.value = uri selectedSingleImageUriThumbnail.value = null } else { selectedSingleImageUri.value = null Log.e("uri", "PLAndroid" + uri) selectedSingleImageUriThumbnail.value = uri } } } ) selectedSingleImageUri.value.let { if (it != null) { AsyncImage(model = it, contentDescription = "") } } Here AsyncImage is an ImageView to display the file you have selected .