En mi actividad, creo un Bitmap
objeto y luego necesito lanzar otro Activity
. ¿Cómo puedo pasar este Bitmap
objeto desde la sub-actividad (la que se va a lanzar)?
java
android
bitmap
parcelable
Miguel
fuente
fuente
URI
oResourceID
del mapa de bits y no el propio mapa de bits. Pasar todo el mapa de bits requiere mucha memoria. Pasar la URL requiere muy poca memoria y permite que cada actividad cargue y escale el mapa de bits según lo necesite.En realidad, pasar un mapa de bits como Parcelable dará como resultado un error de "FALLA DE ENLACE DE JAVA". Intente pasar el mapa de bits como una matriz de bytes y compílelo para mostrarlo en la siguiente actividad.
Compartí mi solución aquí:
¿cómo pasas imágenes (mapas de bits) entre las actividades de Android usando paquetes?
fuente
Pasar el mapa de bits como parceable en el paquete entre actividades no es una buena idea debido a la limitación de tamaño de Parceable (1mb). Puede almacenar el mapa de bits en un archivo en almacenamiento interno y recuperar el mapa de bits almacenado en varias actividades. Aquí hay un código de muestra.
Para almacenar un mapa de bits en un archivo myImage en almacenamiento interno:
Luego, en la siguiente actividad, puede decodificar este archivo myImage en un mapa de bits utilizando el siguiente código:
Nota Se omite mucha comprobación de mapas de bits nulos y de escala.
fuente
openFileOutput
.Si la imagen es demasiado grande y no puede guardarla y cargarla en el almacenamiento, debería considerar usar una referencia global estática al mapa de bits (dentro de la actividad de recepción), que se restablecerá a nulo en onDestory, solo si "isChangingConfigurations" devuelve verdadero
fuente
Porque la intención tiene límite de tamaño. Utilizo un objeto público estático para pasar el mapa de bits del servicio a la transmisión ...
pasar en mi servicio
My BroadcastReceiver
fuente
Comprimir y enviar
Bitmap
La respuesta aceptada se bloqueará cuando
Bitmap
sea demasiado grande. Creo que es un límite de 1 MB . SeBitmap
debe comprimir en un formato de archivo diferente, como un JPG representado por unByteArray
, luego se puede pasar de forma segura a través de unIntent
.Implementación
La función está contenida en un hilo separado usando Kotlin Coroutines porque la
Bitmap
compresión se encadena después de queBitmap
se crea desde una urlString
. LaBitmap
creación requiere un subproceso separado para evitar errores de aplicación que no responde (ANR) .Conceptos usados
toBitmap()
hay una función de extensión de Kotlin que requiere que la biblioteca se agregue a las dependencias de la aplicación.Código
1. Comprima
Bitmap
a JPGByteArray
después de que se haya creado.Repository.kt
ViewModel.kt
2. Pase la imagen como a
ByteArray
través de unIntent
.En esta muestra se pasa de un Fragmento a un Servicio . Es el mismo concepto si se comparte entre dos actividades .
Fragment.kt
3. Convertir de
ByteArray
nuevo aBitmap
.Utils.kt
fuente
Puede ser tarde pero puede ayudar. En el primer fragmento o actividad, declare una clase ... por ejemplo
Luego, en la segunda clase / fragmento, haga esto ...
Espero eso ayude.
fuente
Todas las soluciones anteriores no me funcionan, el envío de mapas de bits
parceableByteArray
también genera erroresandroid.os.TransactionTooLargeException: data parcel size
.Solución
putExtra(String)
comofuente
Puede crear una transferencia de mapa de bits. prueba esto....
En la primera clase:
1) Crear:
2) Crear getter y setter
3) Establecer la imagen:
Luego, en la segunda clase:
fuente
En mi caso, la forma mencionada anteriormente no funcionó para mí. Cada vez que pongo el mapa de bits en la intención, la segunda actividad no comenzó. Lo mismo sucedió cuando pasé el mapa de bits como byte [].
Seguí este enlace y funcionó como un encanto y muy rápido:
en mi primera actividad:
y aquí está el onCreate () de mi segunda actividad:
fuente
CommonResources.photoFinishBitmap
lugar deConstants.photoFinishBitmap
.