The Android Arsenal – Otros contenedores

ScopeMideaPicker es un selector de medios para imágenes, videos que admite el sistema de archivos Android 10 y 11 (sin bandera requestLegacyExternalStorage), incluye ambos con cámara / galería, adivina qué, los permisos se administran internamente, ¡yayy!

También se agregaron soportes para el selector de archivos con los tipos de archivo de su elección.

Solo tienes que llamar al método de inicio y devolver la llamada a la biblioteca y listo, amigos 🙂

También permite la selección de múltiples imágenes / videos y también le permite recortar la funcionalidad de la imagen en caso de una selección única (generalmente se usa para seleccionar la imagen de perfil)

siga las sencillas instrucciones a continuación

Paso 1. Agregue el repositorio de JitPack a su archivo de compilación

Agréguelo en su build.gradle raíz al final de los repositorios:

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

Paso 2. Agrega la dependencia

dependencies {
        implementation 'com.github.bhoomit11:ScopedMediaPicker:1.0.0'
}

Paso 3. Inicialice el selector de medios

private val scopedMediaPicker by lazy {
    ScopedMediaPicker(
        activity = this@MediaPickerActivity,  
        fragment = this@MediaPickerFragment  // Optional, Only if used with fragment
        requiresCrop = true, // Optional
        allowMultipleImages = true, // Optional
    )
}

Bien, analicemos el paso 3, para inicializar el selector de medios, debe agregar diferentes configuraciones según sus necesidades, como

ocupaciones – Si está utilizando su reproductor multimedia en actividad, proporcione su instancia de actividad aquí, para que se le recuerde en esta misma actividad para el método de reemplazo onRequestPermissionsResult Y onActivityResult, esto también se usará como contexto en la biblioteca, por lo que incluso con el fragmento, este es un parámetro obligatorio

fragmento – Si está utilizando su reproductor multimedia en un fragmento, proporcione su instancia de fragmento aquí, para que le devuelva la llamada en este mismo fragmento para el método de anulación. onRequestPermissionsResult Y onActivityResult,

requiereCrop – Si necesita la funcionalidad de recorte en la imagen seleccionada, puede pasar esto como verdadero, tenga en cuenta que esto no funcionará con allowMultipleImages como verdadero, solo funciona para una imagen de una sola opción, como seleccionar la imagen de perfil, por lo que si este parámetro es verdadero, allowMultipleImages debería ser falso.

allowMultipleImages – Si es necesario recopilar varias imágenes

Paso 4. Comience a recopilar sus archivos multimedia

btnCapture.setOnClickListener {

   scopedMediaPicker.startMediaPicker(
           mediaType = ScopedMediaPicker.MEDIA_TYPE_IMAGE or
                       ScopedMediaPicker.MEDIA_TYPE_VIDEO
       ) { pathList, type ->
       when (type) {
           ScopedMediaPicker.MEDIA_TYPE_IMAGE -> {
           // Handle your images here
           }
           ScopedMediaPicker.MEDIA_TYPE_VIDEO -> {
            // Handle your videos here
           }
       }

}

Obtendrá una lista de rutas de imagen en pathList ArrayList. (Primer elemento en caso de selección única) Además, el parámetro mediaType debe pasarse aquí

tipo de medio – Este es un parámetro obligatorio,

ScopedMediaPicker.MEDIA_TYPE_IMAGE solo para el selector de imágenes
ScopedMediaPicker.MEDIA_TYPE_VIDEO solo para el selector de video
ScopedMediaPicker.MEDIA_TYPE_IMAGE o ScopedMediaPicker.MEDIA_TYPE_VIDEO para ambos

Paso 4.1. Empiece a recopilar sus archivos

btnFile.setOnClickListener {
    scopedMediaPicker.startFilePicker(
        fileTypes = arrayListOf(
            ScopedMediaPicker.PDF,
            ScopedMediaPicker.DOC,
            ScopedMediaPicker.PPT,
            ScopedMediaPicker.XLS,
            ScopedMediaPicker.TXT,
            ScopedMediaPicker.ZIP
        )
    ) { list ->
        // Handle your files here
    }
}

fileTypes define la matriz de tipos de archivos de soporte que desea seleccionar con el selector de archivos. Obtendrá una lista de objetos FileData que contiene 5 cosas:

fileUri (para abrir el documento use este URI)
fileInputStream (para cargar un archivo con el propósito de usar este Inputstream)
Nombre del archivo
extensión de archivo
mimeType (al abrir un URI con intención, puede usar este mimeType)

Paso 5. Devuelva los datos de la intención a su ScopedMediaPicker,

Si no sigue este paso, la devolución de llamada no devolverá la imagen / video redimensionado a Comienzo calback.

override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<out String>,
    grantResults: IntArray
) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults)
    scopedMediaPicker.onRequestPermissionsResult(requestCode, permissions, grantResults)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    scopedMediaPicker.onActivityResult(requestCode, resultCode, data)
}

Entonces, sí, ahí está, consulte el ejemplo en el repositorio de GIT para obtener más información y siga publicando reseñas
Buena codificación 🙂

Licencia

Copyright 2021 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

.

Compruebe también

en vivo desde Droidcon, incluida la mayor actualización de Gemini en Android Studio y más lanzamientos del SDK de Android.

Acabamos de lanzar nuestro episodio de otoño de #TheAndroidShow en YouTube etcétera desarrollador.android.comy esta vez …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *