El Sr. Expensive Toys dijo: Me sorprende que este problema siga apareciendo, ya que comenzó a ocurrir tan atrás como en Honeycomb.
Entonces, la /storage/emulated/0/DCIM/Camera
es la misma carpeta que tu carpeta normal DCIM/Camera. Es solo un enlace simbólico. Entonces, los archivos realmente están en la ubicación correcta, simplemente tienes una aplicación que introdujo datos incorrectos en la base de datos de MediaStore.
Cuando accedes a los archivos desde tu PC, estás enumerando la base de datos de MediaStorage para los archivos. No está extrayendo listas tradicionales de directorios. Entonces, lo que ves se basa en lo que está en esa base de datos y las entradas de rutas en la base de datos.
Los archivos en la base de datos que apuntan a directorios emulados no se muestran, ya que se asume que son duplicados, ya que es la misma carpeta física que tu DCIM/Camera normal. Lo que está sucediendo es que algunas aplicaciones de terceros mal escritas están insertando entradas en la base de datos con la ruta /storage/emulated/0/DCIM/Camera
en lugar de la ruta root adecuada a DCIM/Camera. Lo que significa que el servicio MTP no puede verlos cuando estás conectado a tu PC.
Por lo general, la forma más fácil de solucionar el problema es simplemente borrar las bases de datos de MediaStore para sacar las entradas incorrectas de la base de datos de MediaStore y permitir que el sistema vuelva a indexar los archivos y agregarlos a la base de datos con las rutas correctas.
Configuración-> aplicaciones Presiona el menú de 3 puntos en la esquina superior derecha y selecciona Mostrar sistema Encuentra Almacenamiento de medios, Selecciónalo, Selecciona Almacenamiento, luego Borrar datos Encuentra Almacenamiento externo, Selecciónalo, Selecciona Almacenamiento, luego Borrar datos Apaga el teléfono, enciéndelo nuevamente, espera a que el servicio de indexación reconstruya los datos.
Cuando hayas terminado, los archivos deberían aparecer con el árbol de directorios adecuado y ser visibles desde la PC. Dependiendo de la cantidad de archivos en el teléfono, puede tomar entre 10 y 20 minutos reconstruir la base de datos multimedia, ya que el servicio recorre los directorios del teléfono, obtiene metadatos, crea miniaturas, etc.
0 votos
¿Qué te hace pensar que
/storage/emulated/0
es específico de un usuario en particular, y no solo el "primer dispositivo de almacenamiento emulado", como/storage/sdcard0
es la primera (interna) tarjeta SD?0 votos
@Izzy Porque el número (es decir, en este caso '0') indica un espacio de almacenamiento asignado a un usuario específico. ¿No se convirtió Android en una plataforma multiusuario a partir de Android 4.2?
0 votos
Ah, lo siento - volví a mezclarlo (
0
vs./0
es demasiado fácil de confundir). Por favor, verifica con: ¿Por qué se convirtió /sdcard/ en /sdcard/0/ con 4.2? y Confundido por las muchas ubicaciones de la / tarjeta sd virtual. Yo nunca jugué con varios usuarios yo mismo, así que no profundicé aquí. Si tienes varios usuarios en tu dispositivo, ¿puedes verificar? Estaría curioso, pero mi suposición es que/storage/sdcard0
siempre apunta al directorio correspondiente del usuario, como lo hace/storage/emulated/legacy/
.0 votos
@Izzy Leí ambas preguntas antes de venir aquí. No creo que necesitemos crear varios usuarios ya que solo estoy mencionando "0", solo el propietario singular. Estoy preguntando si los archivos creados por el usuario deben aparecer en "/storage/sdcard0". Mi pregunta podría indicar una falta fundamental de comprensión sobre cómo está diseñada la estructura de archivos de Android, así que no sé si lo que estoy preguntando tiene sentido. Por lo que entiendo, creo que ese es el objetivo de "/storage/emulated" en primer lugar, proporcionar un espacio específico para que cada usuario confine carpetas y archivos lejos de otros usuarios.
0 votos
@Izzy es simplemente el valor predeterminado del sistema en estos días que el 0 esté incluido. Eso, o tal vez sea alguna otra conspiración gubernamental.
1 votos
@Narcotixs Los directorios están vinculados a la misma ubicación física, lo cual es normal.
1 votos
@DanBrown Si entendí bien, el OP está preguntando: "Si /storage/sdcard0 es de lectura y escritura libre, ¿cuál es el punto de tener un directorio /storage/emulated/X para cada usuario?", lo cual es una buena pregunta.
0 votos
@DeathMaskSalesman Si ese es el caso, entonces no tengo idea. Nunca realmente me he metido con usuarios múltiples (¿pero quién lo ha hecho?).
0 votos
Exacto, eso es lo que me desconcierta, y lo que también reconocí solo después de escribir mi comentario inicial. Por lo tanto, la pregunta es si alguien con varios usuarios en un dispositivo podría verificarlo, por favor.
0 votos
@DanBrown yo mismo, hace una hora. No me gustó la experiencia.
0 votos
@Izzy, por lo que rápidamente entendí, cuando creas un segundo usuario, ellos reclaman /storage/sdcard10 en lugar de, digamos, 1 o 2
0 votos
Bien, @DanBrown, y después de eso (o incluso antes), comprueba con el comando
mount
. Sorpresa, espero: hay un sistema de archivos FUSE superpuesto (así es como la tarjeta SD interna está separada del otro almacenamiento interno mientras se encuentra en la misma partición). Lo que sospecho ahora es que este sistema FUSE podría encargarse de separar los datos del usuario, mapeando la "tarjeta SD" en el lugar apropiado.0 votos
@Izzy Hmmm, eso tendría sentido. No tengo un dispositivo rooteado para jugar con en este momento (de hecho, no tengo un dispositivo rooteado en absoluto, acabo de darme cuenta) por lo que realmente no puedo jugar con la terminal.
1 votos
@DanBrown no need for root, you can use a terminal without :) Y sí, mi suposición parece correcta: ¿Por qué Android utiliza fuse para montar la tarjeta SD interna? dice El sistema de archivos FUSE también gestiona los permisos de los archivos almacenados en la carpeta /data/media. ¡Veamos si puedo encontrar más evidencia que justifique una respuesta :)
0 votos
Relacionado: ¿Qué es /storage/emulated/0/?