Programação para a Plataforma Android Aula 7 Mul$mídia Como executar aplicações que contêm músicas? Como abrir vídeos em Android? Quais formatos de músicas são aceitos? Quais formatos de vídeo? Como o$mizar a u$lização de recursos? O sistema de arquivos Android
Recursos Mul$mídia O que são recursos mul$mídia?.. Como poderíamos usá los em um smartphone? Exemplos de aplicação?
Recursos Mul$mídia O que são recursos mul$mídia? Vídeo Som Como poderíamos usá los em um smartphone? Quais métodos certamente teremos de implementar? Exemplos de aplicação? MP3 Player: Escreva uma atividade para tocar uma música assim que a tecla central do Dpad for pressionada.
AulaAc$vity7.java Tocador de MP3 public class AulaAc$vity10 extends Ac$vity { private MediaPlayer mp; Como recursos de som são armazenados e manipulados? @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); setvolumecontrolstream(audiomanager.stream_music); } @Override public boolean onkeydown(int keycode, KeyEvent event) { } }
Recursos de Som Recursos, em geral, são armazenados na pasta res. Arquivos de som seguem o mesmo padrão de uso. A música deve ser iniciada quando a tecla central do D- pad for pressionada.
AulaAc$vity7.java Tocando uma música public boolean onkeydown(int keycode, KeyEvent event) { int resid; switch (keycode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: resid = R.raw. cairnomount_lo; break; default: return super.onkeydown(keycode, event); } if (mp!= null) { mp.release(); } mp = MediaPlayer.create(this, resid); mp.start(); return true; } Como parar a música? O que é este termo: super? Adicione estados a esse evento: ao clicar na tecla central do D- pad, a música deve começar a tocar, se ela já não estiver tocando, e deve parar caso contrário.
Guardando Estados public boolean onkeydown(int keycode, KeyEvent event) { int resid; switch (keycode) { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: resid = R.raw.tempta$ons; break; default: return super.onkeydown(keycode, event); } Qual a diferença entre stop e release? if (isplaying) { isplaying = false; mp.stop(); mp.release(); } else { isplaying = true; mp = MediaPlayer.create(this, resid); mp.start(); } return true; } E quais formatos de áudio Android suporta? Onde a variável isplaying está definida? AulaAc$vity7.java
Formatos de Áudio WAC AAC (Formato usado no Ipod da Apple) MP3 WMA AMR OGG MIDI
Adicionando Música ao nosso Sudoku Músicas e Atividades: Modifique a atividade Sudoku, para que ela use dois tipos de músicas: A primeira música deve ser tocada na tela inicial do jogo. A segunda música deve ser tocada na tela de jogo (durante o jogo).
Music.java Um Tocador Simples public class Music { private sta?c MediaPlayer mp = null; public sta?c void play(context context, int resource) { stop(context); mp = MediaPlayer.create(context, resource); mp.setlooping(true); mp.start(); } public sta?c void stop(context context) { if (mp!= null) { mp.stop(); mp.release(); mp = null; } } } Para que serve esse modificador: static? Seria possível usar o fato de atividades terem estados? O que essa classe faz? Como usá-la para colocar música no Sudoku?
Sudoku.java Máquina de Estados public class Sudoku extends Ac$vity implements OnClickListener {. @Override protected void onresume() { super.onresume(); Music.play(this, R.raw. cairnomount_lo); } @Override protected void onpause() { super.onpause(); Music.stop(this); } } E como fazer a música tocar durante o jogo?
Game.java E mais máquina de estados public class Game extends Ac$vity {... @Override protected void onresume() { super.onresume(); Music.play(this, R.raw. pipershut_lo); } @Override protected void onpause() { super.onpause(); Music.stop(this); } }
Vídeos Android suporta pelo menos três formatos de vídeo: MP4 H.264 (AVC) H.263 (3GP): este é o formato mais recomendado, pois é um padrão entre os disposi$vos móveis Como arquivos de vídeo são manipulados? Onde os arquivos de vídeo ficam armazenados? Como podemos usar arquivos de vídeo em nossas apps?
VideoAc$vity.java VideoAc$vity public class VideoAc$vity extends Ac$vity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.video); VideoView video = (VideoView) findviewbyid(r.id.video); video.setvideopath("/data/samplevideo.3gp"); video.start(); } } E ainda temos de carregar esse vídeo. Temos de definir esse layout.
video.xml VideoView <?xml version="1.0" encoding="ux 8"?> <FrameLayout xmlns:android= "h{p://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <VideoView android:id="@+id/video" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" /> </FrameLayout> Mas ainda temos de carregar o vídeo!
Sistema de Arquivos Android usa o sistema de arquivos do Linux. Videos podem ser lidos diretamente desse sistema de arquivos. Mas antes o video precisa ser colocado em algum diretório. Para visualizar o sistema de arquivos: window show view other Android File explorer
Ainda o Sistema de Arquivos Arquivos podem ser copiados ou removidos diretamente do sistema de arquivos via a interface Eclipse. Se houver algum disposi$vo conectado, pode se acessar o sistema de arquivos via adb, ex.: adb push samplevideo.3gp /data/ samplevideo.3gp
Lendo o sistema de arquivos Android disponibiliza alguns recursos para lermos e escrevermos sobre o sistema de arquivos. public class VideoAc$vity extends Ac$vity { @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); String[] l = this.filelist(); Como subir arquivos para o sistema de arquivos? Log.v("File", "Ready to print:"); for (String s : l) { Log.v("File", s); } } } VideoAc$vity.java O que essa atividade faz?