1 00:00:02,100 --> 00:00:07,110 Ahora, esta aplicación React Native está construida con la ayuda de expo como ya sabes. Ahora, como mencioné al comienzo del curso, 2 00:00:07,110 --> 00:00:12,690 esta sigue siendo una aplicación React Native regular, por lo tanto, expo solo como un contenedor 3 00:00:12,690 --> 00:00:19,170 adicional que proporciona muchas características prácticas que hacen que la construcción de esta aplicación sea más fácil y 4 00:00:19,170 --> 00:00:20,820 es como un shell, 5 00:00:20,820 --> 00:00:27,770 una aplicación en la que se ejecuta nuestra aplicación que, por lo tanto, hace que aprovechar muchas de las funciones 6 00:00:27,780 --> 00:00:31,860 nativas del dispositivo sea más fácil y especialmente fácil de configurar. 7 00:00:31,860 --> 00:00:37,380 Ahora, como también mencioné al comienzo de este módulo, en un módulo separado le mostraré cómo puede agregar 8 00:00:37,380 --> 00:00:40,590 características nativas del dispositivo a aplicaciones que no son expo, 9 00:00:40,890 --> 00:00:46,170 pero en realidad, si no tiene una razón para no usar expo, lo haría le recomiendo que 10 00:00:46,170 --> 00:00:53,400 lo use porque expo si revisa sus documentos, tiene muchas características integradas y muchos módulos nativos incorporados que puede usar, por lo que puede 11 00:00:53,400 --> 00:00:54,570 agregar fácilmente características 12 00:00:54,570 --> 00:00:56,460 nativas del dispositivo y verá una 13 00:00:57,090 --> 00:01:01,620 lista completa aquí yendo a los documentos y allí a la referencia de la API. 14 00:01:01,620 --> 00:01:07,650 Aquí, verá un montón de cosas que puede agregar a su aplicación y estas son en su mayoría 15 00:01:08,070 --> 00:01:11,220 funcionalidades de dispositivos nativas que son provistas por expo 16 00:01:11,340 --> 00:01:16,770 de fábrica, por lo que aún necesitará instalar algo pero no deberá hacer ningún manual 17 00:01:16,770 --> 00:01:23,700 configuración y, como verá en la creación de una aplicación sin módulo de exposición, es posible que deba realizar alguna configuración 18 00:01:23,790 --> 00:01:30,270 si está agregando módulos nativos, paquetes de funciones de dispositivos nativos a una aplicación que no sea expo, por 19 00:01:30,270 --> 00:01:32,560 lo que es realmente genial aquí. 20 00:01:32,650 --> 00:01:38,360 Ahora quiero usar una cámara y, de hecho, hay un paquete de cámara que puede agregar. 21 00:01:38,610 --> 00:01:42,510 De hecho, podríamos usar eso para acceder a la cámara del 22 00:01:42,510 --> 00:01:43,620 dispositivo, esto 23 00:01:43,620 --> 00:01:49,620 es perfecto si necesita crear una aplicación que realmente necesite hacer mucho con la cámara, si está 24 00:01:49,620 --> 00:01:55,440 construyendo como Instagram, como una aplicación donde realmente desea controlar toda la pantalla de la cámara y 25 00:01:55,440 --> 00:02:00,760 todo el flujo de la cámara, en realidad no es lo que quiero hacer aquí. 26 00:02:00,780 --> 00:02:02,960 Quiero usar la cámara del dispositivo normal, 27 00:02:02,970 --> 00:02:04,660 no necesito nada especial 28 00:02:04,740 --> 00:02:08,150 allí, solo me importa obtener una imagen que el usuario pueda 29 00:02:08,230 --> 00:02:13,620 tomar y para eso obtenemos el selector de imágenes. Esto también nos permite usar la cámara del dispositivo, 30 00:02:13,620 --> 00:02:16,200 pero no nos permite personalizar tanto la cámara, pero 31 00:02:16,200 --> 00:02:18,450 eso es exactamente lo que necesito aquí. 32 00:02:18,450 --> 00:02:25,050 Ahora todo lo que tenemos que hacer para acceder es ejecutar este comando de instalación de expo, que por cierto es 33 00:02:25,170 --> 00:02:30,750 como npm install, solo para asegurarse de que instala una versión del paquete que garantiza que funcione con 34 00:02:30,750 --> 00:02:38,070 nuestra versión específica de expo que estamos usando en esta aplicación. Así que simplemente copiaré este comando y luego 35 00:02:38,090 --> 00:02:45,530 en este proyecto, podemos ejecutar expo install expo image picker. Haga clic en Intro y esto ahora instalará este paquete con 36 00:02:45,530 --> 00:02:49,580 npm install detrás de escena, esto es lo que hace aquí, solo 37 00:02:49,610 --> 00:02:55,880 en una versión que se ajusta a nuestro SDK de exposición donde estamos usando en este proyecto y 38 00:02:55,880 --> 00:02:58,190 ahora lo instalará y eso es todo, 39 00:02:58,190 --> 00:03:00,410 No se necesita configuración adicional. 40 00:03:00,410 --> 00:03:02,800 No necesitamos tocar ningún archivo de configuración, 41 00:03:02,810 --> 00:03:04,570 no necesitamos hacer nada más, 42 00:03:04,640 --> 00:03:07,970 esto asegura que podamos usar esta funcionalidad y, por supuesto, 43 00:03:07,970 --> 00:03:09,690 eso es muy fácil. 44 00:03:09,770 --> 00:03:15,280 Con eso podemos comenzar a usarlo y quiero comenzar a usarlo aquí en la nueva pantalla de lugar 45 00:03:15,350 --> 00:03:17,270 donde tenemos entrada de texto, 46 00:03:17,270 --> 00:03:22,480 allí también quiero agregar ahora un botón que el usuario puede presionar para abrir la cámara. 47 00:03:22,490 --> 00:03:27,680 Ahora, por supuesto, para todas estas funciones nativas del dispositivo y también para las muchas funciones que, por 48 00:03:27,680 --> 00:03:32,660 supuesto, no podemos cubrir en este curso, siempre aprendió cómo puede usarlas aquí en sus documentos de 49 00:03:32,660 --> 00:03:38,260 exposición oficiales, allí aprendió a qué métodos y propiedades puede acceder allí, encontrará algunos ejemplos breves para muchos paquetes, por 50 00:03:38,300 --> 00:03:43,220 lo que definitivamente es algo que debe consultar. Para la cámara, por supuesto, también 51 00:03:43,220 --> 00:03:46,920 puedes seguirnos porque la usaremos juntos aquí para tomar una foto. 52 00:03:46,970 --> 00:03:54,830 De hecho, crearé un nuevo componente, ImageSelector. js, puedes nombrarlo como quieras en el 53 00:03:54,830 --> 00:04:05,810 que importo React from React y donde importo una vista y un botón y también un texto de React Native y también la 54 00:04:06,290 --> 00:04:11,710 hoja de estilo, por supuesto, porque quiero diseñar mi selector de imágenes. 55 00:04:11,870 --> 00:04:16,130 Vamos a llamarlo realmente selector de imágenes, me gusta, mi componente selector de imágenes. 56 00:04:16,790 --> 00:04:23,570 Entonces, aquí, el selector de imágenes es un componente normal, por supuesto, donde quiero configurar 57 00:04:23,580 --> 00:04:31,290 algunos estilos con la hoja de estilo. crear método y donde al final exporto el componente selector de imagen. 58 00:04:31,310 --> 00:04:37,510 Ahora, ¿qué va a pasar aquí en el componente selector de imágenes? Al final, aquí devolveré una vista 59 00:04:37,780 --> 00:04:44,750 que luego debería tener otra vista donde pueda mostrar una vista previa de la imagen. 60 00:04:44,770 --> 00:04:50,500 Entonces, allí, quiero tener el componente de texto donde digo que aún no se ha seleccionado ninguna imagen, que es mi 61 00:04:50,530 --> 00:04:52,840 contenido alternativo si aún no se seleccionó ninguna imagen, 62 00:04:52,930 --> 00:04:54,920 de lo contrario, mostraré una imagen, 63 00:04:54,940 --> 00:04:59,700 por lo que también tendremos que importar el componente de imagen desde Reaccione Native y debajo de esa 64 00:04:59,710 --> 00:05:09,180 vista, agregaré un botón con un título de tomar imagen donde quiero establecer el color en Colores. primaria, así que para eso, asegúrese 65 00:05:09,190 --> 00:05:17,410 de importar los colores de manera constante y, al presionar, quiero 66 00:05:17,500 --> 00:05:27,530 abrir la cámara y mostrarla al usuario. Así que también agregaré una constante aquí, tomar el controlador de imagen y esa es una 67 00:05:27,530 --> 00:05:29,480 función que debería abrir la 68 00:05:29,480 --> 00:05:33,140 cámara y esa es la función que vincularé a este botón. 69 00:05:33,170 --> 00:05:42,470 Ahora un poco de estilo estaría bien. En esa vista externa, agregaré un estilo de selector de imágenes, en esta 70 00:05:42,800 --> 00:05:45,860 vista interna que muestra una vista previa 71 00:05:45,860 --> 00:05:55,020 de mi imagen, agregaré un estilo de vista previa de la imagen. Entonces, este texto aquí también podría tener un estilo, pero en realidad no necesito 72 00:05:55,020 --> 00:06:02,910 ningún estilo especial allí y, por supuesto, también quiero generar una imagen aquí y pronto agregaré una condición if / else para mostrar solo 73 00:06:02,910 --> 00:06:05,120 el texto o la imagen 74 00:06:05,270 --> 00:06:09,030 y esto También debería tener algún estilo de imagen tal vez. 75 00:06:09,030 --> 00:06:13,620 Entonces, ahora tenemos tres identificadores de estilo que necesitamos agregar a la hoja 76 00:06:13,890 --> 00:06:17,440 de estilo, obtenemos el selector de imagen para el componente 77 00:06:17,610 --> 00:06:22,440 general, obtenemos la vista previa de la imagen y luego obtenemos la imagen en sí. 78 00:06:22,440 --> 00:06:28,560 La imagen en sí es simple, solo quiero establecer un ancho del 100% y una altura del 100% para que 79 00:06:28,560 --> 00:06:32,670 tome el ancho y la altura completos del contenedor de vista previa circundante. 80 00:06:32,670 --> 00:06:36,750 Ese contenedor, por supuesto, se puede configurar como quiera configurarlo, le daré 81 00:06:36,870 --> 00:06:41,550 un ancho del 100% y una altura de 200 píxeles pero, por supuesto, puede 82 00:06:41,550 --> 00:06:47,880 cambiarlo o calcularlo dinámicamente con las dimensiones API. Agregue un margen al final de 10 83 00:06:47,880 --> 00:06:55,400 y asegúrese de que mi texto de marcador de posición en realidad esté centrado agregando el centro de 84 00:06:55,400 --> 00:06:59,470 contenido de justificación y alinee el centro de elementos aquí 85 00:06:59,730 --> 00:07:08,460 y además de eso, también agregaré un borde aquí con color de borde de color gris claro y ancho de borde 86 00:07:08,460 --> 00:07:09,500 de uno. 87 00:07:09,720 --> 00:07:15,270 Ahora, para el componente selector de imágenes en general, solo configuraré esto para alinear el centro de elementos 88 00:07:15,270 --> 00:07:19,020 para asegurarme de que todos los elementos estén centrados horizontalmente, pero 89 00:07:19,080 --> 00:07:22,910 ahora estamos todos aquí para abrir realmente la cámara del dispositivo, ¿verdad? 90 00:07:23,010 --> 00:07:28,680 Entonces, antes de hacer cualquier otra cosa aquí con respecto a la vista previa, etc., 91 00:07:28,700 --> 00:07:40,720 asegurémonos de que aquí en el controlador de toma de imágenes, realmente abrimos la cámara y para eso, importamos todo como selector de imagen desde el selector de imagen de exposición, así que 92 00:07:41,500 --> 00:07:48,460 a partir de esto paquete que acaba de instalar. Ahora, ya que utilicé el selector de imágenes aquí y 93 00:07:48,490 --> 00:07:54,360 también para el componente, tendremos un choque de nombres, así que nombraré este selector de imágenes 94 00:07:54,390 --> 00:07:59,860 aquí solo para evitar este choque de nombres que de lo contrario causaría problemas, también 95 00:07:59,920 --> 00:08:02,910 cámbielo aquí en la exportación de curso. 96 00:08:02,920 --> 00:08:06,610 Así que ahora con el selector de imágenes importado aquí, podemos usarlo aquí, 97 00:08:06,610 --> 00:08:07,700 selector de imágenes 98 00:08:07,840 --> 00:08:10,930 y allí podemos llamar a la cámara de inicio asíncrona. 99 00:08:10,960 --> 00:08:13,810 También puede abrir la galería si 100 00:08:13,810 --> 00:08:18,000 lo desea, pero aquí, llamaré a la cámara de lanzamiento asíncrona. 101 00:08:18,140 --> 00:08:25,070 Ahora esto abrirá la cámara del dispositivo y la parte asíncrona aquí implica que esta es una 102 00:08:25,070 --> 00:08:26,120 operación asíncrona. 103 00:08:26,120 --> 00:08:31,550 De hecho, esto devuelve una promesa, lo cual tiene sentido porque abre la cámara y no sabemos cuándo 104 00:08:31,550 --> 00:08:33,740 el usuario terminará de tomar la 105 00:08:33,740 --> 00:08:39,920 imagen, por lo que solo registrará una función que debe ejecutar una vez que el usuario haya terminado y resuelva 106 00:08:39,920 --> 00:08:44,930 la promesa de ejecutar esa función una vez que suceda, una vez que el usuario haya 107 00:08:44,930 --> 00:08:51,400 terminado o también, por supuesto, una vez que el usuario cancele. Podemos manejar todo eso y el resultado y así sucesivamente más 108 00:08:51,400 --> 00:08:57,450 adelante, por ahora veamos si eso funciona y para eso, incluyamos el componente selector de imágenes en la nueva pantalla de lugar. 109 00:08:57,490 --> 00:09:03,670 Entonces, podemos importar el selector de imágenes y aquí, por supuesto, podemos usar ese nombre porque no 110 00:09:03,670 --> 00:09:10,960 estamos usando el paquete del selector de imágenes aquí, importarlo desde los componentes, desde el componente del selector de imágenes y 111 00:09:10,990 --> 00:09:17,780 agregar este selector de imágenes aquí debajo de nuestra entrada de texto como un componente de cierre automático como este. 112 00:09:17,800 --> 00:09:22,300 Ahora, si guardamos eso, echemos un vistazo. Aquí, ese texto, etc., no 113 00:09:22,320 --> 00:09:27,720 está colocado correctamente, no tenemos que preocuparnos por eso en este momento, en vez 114 00:09:27,720 --> 00:09:35,930 de eso, presione tomar imagen y lo que verá es que no pasa nada, pero luego recibo una advertencia: falta la 115 00:09:35,960 --> 00:09:45,360 cámara o permiso de rollo de cámara. En Android, si lo intento, me preguntan si quiero otorgar permisos. Necesito presionar permitir aquí y con 116 00:09:45,360 --> 00:09:51,240 eso, la cámara se abre. Eso es bueno, generalmente funciona, puedo usarlo, 117 00:09:51,240 --> 00:09:52,450 puedo presionar 118 00:09:52,470 --> 00:09:56,790 este botón y luego confirmar la imagen que tomé, pero 119 00:09:57,090 --> 00:10:04,440 en iOS no funciona y ¿por qué es así? Bueno, en iOS, tenemos un error de permiso aquí y 120 00:10:04,480 --> 00:10:05,260 eso simplemente 121 00:10:05,320 --> 00:10:10,810 sucede porque los permisos son importantes pero funcionan de manera diferente en iOS y Android. 122 00:10:11,500 --> 00:10:12,100 En 123 00:10:12,100 --> 00:10:18,600 Android, también configurará los permisos por adelantado y, dado que estamos utilizando esta aplicación expo donde expo proporciona 124 00:10:18,600 --> 00:10:26,440 este contenedor, expo realmente configura y solicita todos estos permisos. Para iOS, el sistema de permisos funciona 125 00:10:26,440 --> 00:10:28,310 un poco diferente. 126 00:10:28,360 --> 00:10:34,390 Realmente no lo configura de modo que tenga un archivo de configuración donde defina todos los permisos por adelantado y 127 00:10:34,390 --> 00:10:34,900 eso 128 00:10:34,900 --> 00:10:38,540 es todo, en su lugar, debe solicitar permiso en tiempo de ejecución. 129 00:10:38,590 --> 00:10:43,040 Nota al margen, por cierto, en algunas versiones de Android, ahora también debería hacerlo. 130 00:10:43,210 --> 00:10:49,600 Aún así, la exposición, como ve, lo hace por usted, por lo que para Android funciona de esa manera, en iOS 131 00:10:49,600 --> 00:10:56,050 no lo hace, debe pedirle al usuario un permiso para acceder a la cámara y eso es simplemente algo que debemos 132 00:10:56,050 --> 00:10:59,890 hacer aquí y podemos hacerlo con la ayuda de otro paquete de 133 00:10:59,890 --> 00:11:02,680 exposición y ese es el paquete de permisos. 134 00:11:02,710 --> 00:11:08,890 También debe instalarlo con este comando aquí en su proyecto para que pueda solicitar 135 00:11:08,890 --> 00:11:10,230 permisos al usuario. 136 00:11:10,420 --> 00:11:12,640 Así que hagamos esto aquí en 137 00:11:12,640 --> 00:11:19,570 el proyecto, ejecutemos expo install expo permissions, que nuevamente es solo este contenedor alrededor de npm install para instalar los permisos para 138 00:11:19,570 --> 00:11:26,050 este proyecto o para instalar este paquete para este proyecto y luego en el selector de imágenes antes de intentar 139 00:11:26,050 --> 00:11:33,580 iniciar el cámara y abriendo la cámara, tendremos que pedir permisos. Para eso, en realidad agregaré una 140 00:11:33,580 --> 00:11:41,260 nueva constante aquí, obtener o verificar permisos y esta es una función, que tiene 141 00:11:41,430 --> 00:11:47,310 una función que utilizará este paquete de permisos recién agregado. 142 00:11:47,310 --> 00:11:52,050 Así que aquí importo todo como permisos de permisos de exposición, por lo que 143 00:11:52,050 --> 00:11:55,280 el mismo tipo de importación que tenemos para el 144 00:11:55,590 --> 00:12:00,420 selector de imágenes y luego allí, podemos usar permisos y preguntar de forma asincrónica. 145 00:12:00,420 --> 00:12:06,270 Nuevamente, esa es una tarea asincrónica que devuelve una promesa porque abrirá un mensaje y antes de que el 146 00:12:06,270 --> 00:12:08,810 usuario haya elegido una respuesta, no sucederá nada, 147 00:12:08,820 --> 00:12:14,760 por lo tanto, tenemos una promesa que se resuelve o se rechaza una vez que el usuario confirmó o rechazó. 148 00:12:16,560 --> 00:12:20,090 Entonces, aquí debemos ser más específicos sobre qué permiso necesitamos, 149 00:12:20,100 --> 00:12:27,270 así que pasamos algo para pedir asíncrono y esa es una constante que obtenemos del objeto de permisos que estamos importando aquí. 150 00:12:27,660 --> 00:12:33,630 Entonces, con la notación de puntos aquí, podemos acceder a diferentes tipos de permisos y aquí todos estos 151 00:12:33,690 --> 00:12:36,660 nombres en mayúscula son los diferentes permisos que 152 00:12:36,660 --> 00:12:41,660 puede solicitar y aquí necesitamos el permiso de la cámara porque queremos acceder a la cámara. 153 00:12:41,710 --> 00:12:46,340 Si quisieras acceder a la galería, ese sería el permiso para rodar la cámara por cierto. 154 00:12:47,850 --> 00:12:49,850 Ahora iré por la cámara aquí 155 00:12:50,700 --> 00:12:54,390 y, como dije, esto devuelve una promesa, quiero usar async aguardar 156 00:12:54,420 --> 00:13:00,410 aquí, por lo tanto, puedo agregar async aquí delante de la función y luego esperar esto y 157 00:13:00,440 --> 00:13:01,500 obtener el 158 00:13:01,500 --> 00:13:06,470 resultado y almacenarlo en una constante , la alternativa a eso sería usar entonces 159 00:13:06,780 --> 00:13:14,010 y detectar esto y ahora podemos verificar si el resultado. el estado no es igual a otorgado, lo que significa que 160 00:13:14,010 --> 00:13:16,210 el usuario rechazó, el usuario no 161 00:13:16,290 --> 00:13:18,770 otorgó permisos, en ese caso no podemos continuar. 162 00:13:18,780 --> 00:13:25,590 Entonces aquí, en realidad, lanzaré una alerta, así que 163 00:13:25,590 --> 00:13:40,420 importe la alerta de React Native y lance donde diga alerta. alerta, permisos insuficientes, debe otorgar permisos de aplicación de cámara para usar esta aplicación o cualquier salida 164 00:13:40,480 --> 00:13:42,890 que desee mostrar y luego 165 00:13:43,000 --> 00:13:49,690 agregaré un botón aquí donde digo OK. Ahora, el usuario deberá cambiar los permisos en la configuración 166 00:13:49,690 --> 00:13:55,000 del sistema después de rechazarlos de todos modos, por lo que no podemos solicitar permisos nuevamente aquí 167 00:13:55,000 --> 00:13:56,950 una vez que se rechazaron. 168 00:13:56,950 --> 00:14:02,950 Entonces, aquí quiero devolver falso porque es la función de verificación de permisos y quiero devolver falso 169 00:14:02,950 --> 00:14:06,790 si el usuario no nos otorgó permisos, devuelvo verdadero de lo 170 00:14:06,790 --> 00:14:10,080 contrario porque ahora sabemos que tenemos permisos Por 171 00:14:10,090 --> 00:14:14,920 cierto, si llamamos a esto funciona varias veces y el usuario ya otorgó 172 00:14:14,920 --> 00:14:20,050 permisos en el pasado, el usuario no volverá a aparecer con este mensaje, de 173 00:14:20,050 --> 00:14:27,880 la misma manera si el usuario rechazó, en ambos casos el resultado se almacena automáticamente por iOS y esta función solo devuelve 174 00:14:27,880 --> 00:14:33,400 verdadero o falso dependiendo de si el usuario negó u otorgó acceso en el pasado. 175 00:14:33,400 --> 00:14:37,350 Por lo tanto, verificar permisos ahora es simplemente una función a la que debemos llamar en 176 00:14:37,350 --> 00:14:40,590 el controlador de toma de imagen antes de intentar usar la cámara. 177 00:14:40,780 --> 00:14:46,600 Entonces, aquí también quiero usar async wait porque verificar permisos, por supuesto, es una función que 178 00:14:46,660 --> 00:14:47,600 devuelve una 179 00:14:47,770 --> 00:14:55,080 promesa, por lo que esperaré esto y almacenaré el resultado que almacenaré en una constante llamada tiene permiso porque esto 180 00:14:56,100 --> 00:15:01,020 es verdadero o falso dependiendo de si el usuario otorgó permisos o no. 181 00:15:01,020 --> 00:15:05,580 Ahora, si esto es falso, así que si no es cierto, simplemente regresaré aquí, no continuaré, 182 00:15:05,580 --> 00:15:11,100 no abriré la cámara porque no se me permitirá hacerlo de todos modos, así que simplemente no podemos continuar, 183 00:15:11,100 --> 00:15:11,580 esa 184 00:15:11,580 --> 00:15:12,360 es la cosa. 185 00:15:13,500 --> 00:15:17,910 De lo contrario, podemos continuar y ahora también deberíamos poder iniciar una cámara en iOS. 186 00:15:17,940 --> 00:15:18,810 Así 187 00:15:18,810 --> 00:15:19,720 que vamos a 188 00:15:19,830 --> 00:15:25,750 intentarlo, guardemos eso y ahora con eso cambiado, en realidad desinstalaré expo aquí para asegurarme de que con 189 00:15:25,750 --> 00:15:29,530 respecto a los permisos que otorgué allí, vuelva al estado inicial. 190 00:15:29,640 --> 00:15:33,860 Probablemente no necesite hacer eso si nunca otorgó ningún permiso en su 191 00:15:33,900 --> 00:15:39,810 aplicación expo, pero si jugó con permisos y paquetes nativos antes, debe desinstalar y luego reinstalar la aplicación 192 00:15:39,810 --> 00:15:44,870 expo ejecutando nuevamente su aplicación en iOS presionando i en la consola de abajo para 193 00:15:44,890 --> 00:15:47,910 asegurarse de que todos estos permisos se restablecen. 194 00:15:47,910 --> 00:15:53,220 Entonces, si vamos a la nueva pantalla de reproducción y hacemos clic en tomar imagen, me 195 00:15:53,490 --> 00:16:00,120 preguntan si quiero otorgar acceso a la cámara y aquí puedo hacer clic en Aceptar y ahora todavía recibimos ese error. 196 00:16:01,490 --> 00:16:07,420 Ahora, la única razón para eso es que, aunque estamos tratando de acceder a la cámara aquí, esto en realidad y 197 00:16:07,420 --> 00:16:12,450 eso es algo que sé para este paquete requiere permisos para el rollo completo de la cámara. 198 00:16:12,450 --> 00:16:16,020 Así que cambiemos esto para solicitar permisos para el carrete de la cámara 199 00:16:22,830 --> 00:16:25,880 aquí y con eso, regrese y haga clic en tomar imagen, 200 00:16:25,880 --> 00:16:32,550 ahora estoy preguntando si quiero permitir el acceso a las fotos y ahora si hago clic en sí, la cámara no está disponible en 201 00:16:32,560 --> 00:16:37,710 el simulador, que ahora es un error diferente y es bastante claro con respecto a cuál es el 202 00:16:37,780 --> 00:16:43,510 problema, el simulador de iOS simplemente no tiene cámara. Así que continuaré con Android de 203 00:16:43,510 --> 00:16:47,380 ahora en adelante, pero por supuesto puedes probar esto en 204 00:16:47,380 --> 00:16:54,250 un iPhone real para ver que allí también funciona. Si escanea su código de barras de exposición con la aplicación de 205 00:16:54,250 --> 00:16:56,000 exposición y ejecuta la aplicación allí 206 00:16:56,050 --> 00:17:02,020 como la vio al comienzo del curso, puede tomar imágenes con un teléfono real y también le mostraré la aplicación terminada al 207 00:17:02,200 --> 00:17:05,750 final de este módulo tanto en dispositivos iOS como Android, en dispositivos reales. 208 00:17:05,890 --> 00:17:10,600 Entonces, por el momento, me centraré en Android y, por supuesto, ya pudimos abrir esto. 209 00:17:10,690 --> 00:17:18,530 Nuevamente me preguntan aquí, pero ahora puedo abrir esto y tomar una imagen. Por supuesto, eso es bueno, pero tomar la imagen de esta manera 210 00:17:18,530 --> 00:17:20,490 no es todo lo que 211 00:17:20,570 --> 00:17:24,590 quiero hacer, también quiero poder configurar cómo lo tomo y quiero poder usarlo.