PDM Avanzado Accedendo á SD en Android 5.1
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...»)
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).