Android Arsenal – Datei-/Verzeichnisauswahl

  • Es können eine oder mehrere Dateien ausgewählt werden.
  • Verfolgt die Anzahl der ausgewählten Dateien genau wie Facebook.
  • Ausgewählte Ordner werden ebenfalls angezeigt.
  • Die Media Store API wird verwendet, um Bilder / Videodateien herunterzuladen. Daher sind Abwärtskompatibilität und nur Leseberechtigung erforderlich.
  • Sowohl Bild-/Video-URIs als auch ImagePaths können heruntergeladen werden.

Klicken Sie auf das Bild, um die Demo anzuzeigen.

So integrieren Sie ein Git-Projekt in Ihren Build:

Schritt 1. Fügen Sie Ihrer Build-Datei ein JitPack-Repository hinzu

Fügen Sie es Ihrem root build.gradle am Ende des Repositorys hinzu:

allprojects {
 repositories {
  ...
  maven { url 'https://jitpack.io' }
 }
}

Schritt 2. Fügen Sie die Abhängigkeit hinzu

dependencies {
        implementation 'com.github.hashimTahir:Facebook-Styled-Image-Picker:1.3'
}

Schritt 3. Verwenden Sie den Launcher, um die Bildauswahl von GalleryActivity wie folgt zu starten:

  hGalleryActivityLauncher.launch(
                Intent(
                    requireContext(),
                    GalleryActivity::class.java
                ).also {
                    it.putExtra(Constants.H_GET_VIDEOS, "")
                }
            )

Verwenden Sie „H_GET_VIDEOS“ und „H_GET_IMAGES“, um Videos und Bilder von Ihrem Gerät abzurufen.

Schritt 4. Holen Sie sich das Ergebnis vom Starter in der IntentHolder-Klasse wie folgt:

  private val hGalleryActivityLauncher = registerForActivityResult(
    ActivityResultContracts.StartActivityForResult()
) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        val hIntentHolder1 = result.data?.extras?.getParcelable<IntentHolder>(H_GET_VIDEOS)
        val hIntentHolder2 = result.data?.extras?.getParcelable<IntentHolder>(H_GET_IMAGES)

        val hBundle = Bundle()
        if (hIntentHolder1 != null) {
            hBundle.putParcelable(H_DATA_IC, hIntentHolder1)
        }
        if (hIntentHolder2 != null) {
            hBundle.putParcelable(H_DATA_IC, hIntentHolder2)
        }

        findNavController().navigate(R.id.action_hHomeFragment_to_hDisplayFragment, hBundle)
    }
}

wobei die Datenklasse IntentHolder eine Liste ausgewählter Bild-/Videodetails enthält.

  @Parcelize
data class IntentHolder(
var hVideosList: List<Folder.VideoItem>? = null,
var hImageList: List<Folder.ImageItem>? = null  
    ) : Parcelable

Die VideoItem-Datenklasse enthält diese Details für jedes Video.

  @Parcelize
data class VideoItem(
    var hFilePath: String? = null,
    val hUri: String? = null,
    var hFileName: String? = null,
    var hFileSize: String? = null,
    var hFileDuaration: String? = null,
    var hModifiedDate: Long? = null,
    var hFileSizeForOrder: String? = null,
    var hFileDateTime: String? = null
) : Parcelable

Die Datenklasse ImageItem enthält diese Details für jedes Video.

   @Parcelize
data class ImageItem(
    val hItemName: String? = null,
    val hSize: String? = null,
    var hImagePath: String? = null,
    var hImageUri: String? = null,
) : Parcelable