logo
Bienvenido visitante. Para activar todas las funcionalidades, por favor Iniciar sesión o Registrarse.

Aviso

Icon
Error

Opciones
Ir a la última publicación
Davidmf8  
#1 Publicado : viernes, 1 de noviembre de 2013 13:03:13(UTC)
Davidmf8

Posición: Advanced Member

Grupos: Registered
Registrado: 21/10/2013(UTC)
Mensajes: 39

Agradecimientos: 4 veces
Fue agradecido: 8 vez/veces in 6 publicación(es).
Buenos días!

Estoy almacenando imágenes tomadas por la cámara en una carpeta en memoria externa. Pero, para mi sorpresa, se guarda en memoria interna, dentro de la carpeta de la aplicación y no se muy bien porque sucede. El código es el siguiente:

Código:
public class Camara extends Activity{
	private static final int IMAGEN_CAPTURADA = 1;
		
	Uri fileUri = null;
	ImageView fotoImagen = null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//Intent camara. Se le indica que la accion del intent será capturar una imagen
		Intent camara = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
		fileUri = Uri.fromFile(ficheroFoto());
		//Idicamos al intent de captura donde se guardará la foto en caso de confirmarlo
		camara.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
		startActivityForResult(camara, IMAGEN_CAPTURADA );
	}
	
	//Sobreescribimos este metodo para lo que necesitamos
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		   Intent cambio_actividad = new Intent();
		  if (requestCode == IMAGEN_CAPTURADA) {
		    if (resultCode == RESULT_OK) {
		        Toast.makeText(this, "Foto guardada con éxito", 
		                       Toast.LENGTH_LONG).show();
		        cambio_actividad.setClass(this, Camara.class);
			    startActivity(cambio_actividad);
		    } 
		    else if (resultCode == RESULT_CANCELED) {
		      Toast.makeText(this, "Cancelado", Toast.LENGTH_SHORT).show();
		      cambio_actividad.setClass(this, MainActivity.class);
		      startActivity(cambio_actividad);
		    } 
		  }
		  
		  
	      
	}
	
	private File ficheroFoto() {
		  //Creamos directorio foto
		File dir = new File(this.getExternalFilesDir(Environment.DIRECTORY_DCIM),  "Fotos");
		if(!dir.exists()){
			dir.mkdir();
		}
		
        String horaLocal = new SimpleDateFormat("yyyMMdd_HHmmss", Locale.ROOT).format(new Date());
        File foto = new File(dir, "IMG_" + horaLocal + ".jpg");
		return foto;
	}

}


Las fotos tomadas se guardan en memoria interna/Android/data/nombredemipaquete/files.
No se porque sucede esto, he probado con variantes como getExternalStoragePublicDirectory y tal y sigue igual. He usado getExternalFilesDir porque quiero que al desintalar mi aplicación, se borren las fotos.

En manifest, puse la etiqueta installLocation=preferExternal para que se instalara en la memoria SD pero tampoco lo hace.

Espero que podais ayudarme. Gracias adelantadas!
admin  
#2 Publicado : viernes, 1 de noviembre de 2013 23:29:48(UTC)
admin

Posición: Administration

Grupos: Administrators
Registrado: 07/10/2010(UTC)
Mensajes: 436
Hombre
Ubicación: España

Agradecimientos: 38 veces
Fue agradecido: 49 vez/veces in 48 publicación(es).
Hola!

yo lo hago asi y me funciona:

Código:

// Creo el directoio para guardar el fichero
File dir = new File(Environment.getExternalStorageDirectory() + "/MiDirectorio/");
 
// si el direcctorio no existe, lo creo
if (!dir.exists()) {
        System.out.println("creando directorio: " + "MiDirectorio");
        dir.mkdir();
}
 
// Creamos el fichero en su ubicación completa
File file = new File(dir, "MiFichero.txt");


no me termina de convencer tu codigo, lo tendria que probar.... prueba tu el mio! ;P

Un saludo!!
Un saludo,

Curso Completo GRATIS paso a paso de como programar Android
http://www.aprendeandroid.com
Davidmf8  
#3 Publicado : sábado, 2 de noviembre de 2013 12:29:20(UTC)
Davidmf8

Posición: Advanced Member

Grupos: Registered
Registrado: 21/10/2013(UTC)
Mensajes: 39

Agradecimientos: 4 veces
Fue agradecido: 8 vez/veces in 6 publicación(es).
Gracias por responder.

Acabo de probar lo tuyo, pero se sigue almacenando en la memoria interna, solo que esta vez en la raiz de la misma.

Tengo un movil LG L5, donde tiene 4 Gb de memoria interna, 2.5 Gb dedicado al usuario. Aparte una tarjeta SD de 2 Gb.

¿Podría ser que esos 2.5Gb dedicados al usuario lo interpretara como memoria externa? He probado toda clase de ejemplos, pero siempre se almacena en esa memoria interna.

Saludos!
admin  
#4 Publicado : sábado, 2 de noviembre de 2013 22:44:28(UTC)
admin

Posición: Administration

Grupos: Administrators
Registrado: 07/10/2010(UTC)
Mensajes: 436
Hombre
Ubicación: España

Agradecimientos: 38 veces
Fue agradecido: 49 vez/veces in 48 publicación(es).
Hola!

Ese es el "tema" no siempre la memoria externa es la targeta SD!! hay teléfonos que particionan la memoria del telefono y la targeta SD es solo para meter contenido multimedia, y no podremos acceder a ella desde la aplicacion, tienes todo esto explicado aqui:

http://www.aprendeandroid.com/l8/almacenamiento_interno.htm



Código:

Cada dispositivo compatible con Android soporta dos tipos de memoria, por un lado tenemos "memoria interna" en esta memoria esta instalada la ROM o versión de Android que corre nuestro dispositivo, y suele quedar parte libre para instalar las distintas aplicaciones además esta es la memoria que se borra cuando restablecemos los valores de fabrica que tanto nos molesta hacer! y por otro lado tenemos una "memoria externa" que se puede utilizar para guardar archivos y también para mover esas aplicaciones que ocupan mas. Esta memoria externa, puede ser un medio de almacenamiento extraíble (como una tarjeta SD) o una memoria interna (no extraíble). Los archivos guardados en el almacenamiento externo son de lectura global y pueden ser modificados por el usuario cuando permiten el almacenamiento masivo USB para transferir archivos de un ordenador.
 

Es posible que el fabricante del dispositivo particione la memoria interna con una partición de almacenamiento externo o "almacenamiento USB" es decir que cuando compremos un teléfono que nos decían que tenia 8Gb de memoria interna, veamos 2 particiones, una por ejemplo de 1,5Gb que se llama "memoria interna" y otra de 5,5Gb a la que llaman "memoria USB o memoria Externa" también es posible que además de esto pueda ofrecer una ranura para tarjetas SD. En este caso, la tarjeta SD no es parte del almacenamiento externo y nuestras aplicaciones no podrán acceder a esta tarjeta SD (el almacenamiento extra es sólo para que podamos proporcionar ficheros multimedia que el sistema escanea) pero repito, no podremos usar esta memoria SD para instalar aplicaciones o acceder a ella desde nuestras aplicaciones.
Un saludo,

Curso Completo GRATIS paso a paso de como programar Android
http://www.aprendeandroid.com
thanks 1 usuario agradecido admin por esta útil publicación.
Davidmf8 en 03/11/2013(UTC)
Davidmf8  
#5 Publicado : domingo, 3 de noviembre de 2013 20:32:34(UTC)
Davidmf8

Posición: Advanced Member

Grupos: Registered
Registrado: 21/10/2013(UTC)
Mensajes: 39

Agradecimientos: 4 veces
Fue agradecido: 8 vez/veces in 6 publicación(es).
Muchas gracias! Estuve buscando en el Api deandroid y viene eso mismo. Una consulta más si no es mucho pedir.

Cuando trabajo con Intent para la camara, resulta que tengo la imagen dos veces: una dentro del paquete de mi aplicación (eso es lo que quiero) y otra en la carpeta por defecto de la camara de Android. Eso me pasa en un dispositivo movil LG L5. He probado en otro dispositivo, y no sucede esto, solo lo tengo en el paquete de mi aplicación. ¿A que se puede deber?

Lo mismo pasa con videos, salvo que en miLG no se almacena en mi paquete y en el otro movil esta todo correctamente.

Son dudas quizás de iniciarme aún en Android. Siento sin son dudas tontas :)

Gracias por vuestra repuestas!
Davidmf8  
#6 Publicado : martes, 5 de noviembre de 2013 12:22:55(UTC)
Davidmf8

Posición: Advanced Member

Grupos: Registered
Registrado: 21/10/2013(UTC)
Mensajes: 39

Agradecimientos: 4 veces
Fue agradecido: 8 vez/veces in 6 publicación(es).
Buenas tardes.

Me respondo a mi mismo: si usamos Intent para usar la cámara, dependerá de la marca del móvil el que exista duplicación de fotos o no. Mi intención es borrar a mano la última foto añadida al directorio de imágenes, se puede saber cual es el archivo más reciente en un directorio?

Saludos!.
admin  
#7 Publicado : martes, 5 de noviembre de 2013 22:17:31(UTC)
admin

Posición: Administration

Grupos: Administrators
Registrado: 07/10/2010(UTC)
Mensajes: 436
Hombre
Ubicación: España

Agradecimientos: 38 veces
Fue agradecido: 49 vez/veces in 48 publicación(es).
Hola!!

Mi movil tambien hace eso, y lo que hago es borrar la foto cuando la copio a donde me interesa, uso este codigo:

Código:

// Borramos la foto de gran tamaño
	if (outputFileUri != null) {
		File image = new File(outputFileUri.getPath());
		image.delete();
	}


quizas te sirva!
Un saludo,

Curso Completo GRATIS paso a paso de como programar Android
http://www.aprendeandroid.com
Usuarios navegando este tema
Guest (3)
Salto de foro  
No puedes iniciar nuevos temas en este foro.
No puedes responder a temas en este foro.
No puedes eliminar sus temas en este foro.
No puedes editar sus temas en este foro.
No puedes crear encuestas en este foro.
No puedes votar las encuestas en este foro.