PDM Avanzado Accedendo á SD en Android 5.1

De MediaWiki
Revisión del 22:26 22 nov 2015 de Wiki (discusión | contribuciones) (Página creada con «==Introdución== * A partires da API 23 o acceso a SD considérase un permiso perigoso polo que temos que solicitar dentro da aplicación o permiso ao usuario. : Isto est...»)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Introdución

  • A partires da API 23 o acceso a SD considérase un permiso perigoso polo que temos que solicitar dentro da aplicación o permiso ao usuario.
Isto está explicado no enlace seguinte: [Permisos especiais Android 5.0 | http://mediawiki.cifprodolfoucha.es/index.php?title=PDM_Avanzado_Permisos_AndroidManifiest.xml]. Teremos que solicitar o permiso Manifest.permission.READ_EXTERNAL_STORAGE se queremos acceder a tarxeta SD Externa e temos no AndroidManifiest un target=23 e estamos a probar cun dispositivo cunha API 23.


  • Pode suceder que queiramos facer unha aplicación que teña acceso a os arquivos multimedia da nosa tarxeta SD.
  • Imos ver dúas formas de facer isto, tendo en conta que o acceso á SD Externa para buscar arquivos pode non funcionar en versións superiores á API 21.


Acceso 'tradicional'

Nas versións anteriores de Android podíamos percorrer toda a tarxeta buscando os arquivos de tipo 'multimedia' e extraendo as súas propiedades (título, xénero,...).
Un exemplo de código:


Clase onde gardaríamos as propiedades:

 1 public class Cancion {
 2 
 3 	public int id;
 4 	public String titulo;
 5 	public String artista;
 6 	public String album;
 7 	public String genero;
 8 	public String year;// Tiene que ser un String porque en algunas canciones no esta en formato de numero
 9 	public String duracion;
10 	public String numeroPista;
11 	public byte[] imagen;
12 	public String fechaAdd;
13 	public String ruta;
14 	
15 	public Cancion(){
16 		
17 	}
18 	public Cancion(int id,String titulo,String artista,String album,String genero,
19 			String duracion,String year,byte[] imagen,String fechaAdd,String numeroPista,String ruta){
20 		
21 		this.id=id;
22 		this.titulo=titulo;
23 		this.artista=artista;
24 		this.album=album;
25 		this.genero=genero;
26 		this.year=year;
27 		this.duracion=duracion;
28 		this.numeroPista=numeroPista;
29 		this.fechaAdd=fechaAdd;
30 		this.ruta=ruta;
31 	}
32 	
33 }



Método que devolve un obxecto da clase Cancion cos datos obtidos a partires dun File:

 1 	public static Cancion crearCanciones(File cancion){
 2 		
 3 		MediaMetadataRetriever mmr = new MediaMetadataRetriever();
 4 
 5 			mmr.setDataSource(cancion.getAbsolutePath());
 6 			Cancion c= new Cancion();
 7 			c.titulo=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
 8 			c.artista=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
 9 			c.album=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
10 			c.genero=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
11 			c.numeroPista=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER);			
12 			c.duracion=String.format("%1$TM:%1$TS",Long.parseLong(mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)));
13 			c.year=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_YEAR);
14 			c.ruta=cancion.getAbsolutePath();	
15 		return c;
16 	}







-- Ángel D. Fernández González -- (2015).