Como faço para que um botão reproduza um som bruto ao clicar? Acabei de criar um botão com id button1
, mas qualquer que seja o código que escrevo, está tudo errado.
import android.media.MediaPlayer;
public class BasicScreenActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_basic_screen);
}
Button one = (Button)this.findViewById(R.id.button1);
MediaPlayer = mp;
mp = MediaPlayer.create(this, R.raw.soho);
zero.setOnCliclListener(new View.OnClickListener() )
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.basic_screen, menu);
return true;
}
}
MusicManager.getInstance().play(this, R.raw.my_sound);
. Em caso afirmativo, esta biblioteca pode ser para você: github.com/delight-im/Android-AudioRespostas:
Esta é a parte mais importante do código fornecido na postagem original.
Para explicar passo a passo:
Primeiro é a inicialização do botão a ser usado para reproduzir o som. Usamos o Activity's
findViewById
, passando o Id que atribuímos a ele (no caso deste exemplo:)R.id.button1
, para obter o botão que precisamos. Nós o convertemos como umButton
para que seja fácil atribuí-lo à variávelone
que estamos inicializando. Explicar mais sobre como isso funciona está fora do escopo desta resposta. Isso dá uma breve visão sobre como funciona.É assim que inicializar um
MediaPlayer
. O MediaPlayer segue o padrão de design do método estático de fábrica . Para obter uma instância, chamamos seucreate()
método e passamos a ele o contexto e o ID do recurso do som que queremos tocar, neste casoR.raw.soho
. Nós o declaramos comofinal
. Jon Skeet forneceu uma ótima explicação sobre por que fazemos isso aqui .Finalmente, definimos o que nosso botão inicializado anteriormente fará. Tocar um som no clique do botão! Para fazer isso, definimos o
OnClickListener
do nosso botãoone
. Dentro há apenas um método,onClick()
que contém as instruções que o botão deve executar ao clicar .Para reproduzir o som, chamamos o
start()
método de MediaPlayer . Este método inicia a reprodução do som.Lá, agora você pode tocar um som ao clicar no botão no Android!
Parte bônus:
Conforme observado no comentário abaixo Obrigado Langusten Gustel! e, conforme recomendado na Referência do desenvolvedor Android , é importante chamar o
release()
método para liberar recursos que não serão mais usados. Normalmente, isso é feito quando o som a ser reproduzido termina a reprodução. Para fazer isso, adicionamos umOnCompletionListener
ao nossomp
like assim:Dentro do
onCompletion
método, nós o liberamos assim:Obviamente, existem maneiras melhores de implementar isso. Por exemplo, você pode tornar o MediaPlayer uma variável de classe e manipular seu ciclo de vida junto com o ciclo de vida do
Fragment
ouActivity
que o usa. No entanto, este é um assunto para outra pergunta. Para manter o escopo desta resposta pequeno, eu a escrevi apenas para ilustrar como reproduzir um som no clique de botão no Android .Postagem Original
Primeiro. Você deve colocar suas instruções dentro de um bloco e, neste caso, o método onCreate.
Segundo. Você inicializou o botão como variável um , então usou uma variável zero e definiu seu onClickListener como um onClickListener incompleto. Use a variável um para setOnClickListener.
Terceiro, coloque a lógica para tocar o som dentro do onClick.
Em suma:
fonte
RELEASE
Testado e funcionando 100%
Isso foi tudo que tivemos que fazer
fonte
A melhor maneira de fazer isso é aqui, depois de pesquisar um problema após o outro no LogCat
Não liberar o Media player causa este erro no LogCat:
Não redefinir o Media player causa este erro no LogCat:
Portanto, use um código simples e seguro para usar o media player.
Para reproduzir mais de um som na mesma atividade / fragmento, basta alterar o resID enquanto cria um novo reprodutor de mídia como
e jogue!
Diverta-se!
fonte
fonte
raw
pasta, caso não exista, crie uma.-
caractere especial.Na sua atividade, você precisa ter um objeto
MediaPlayer
, dentro doonCreate
método ou doonclick
método, você tem que inicializar oMediaPlayer
, gostoMediaPlayer.create(this, R.raw.name_of_your_audio_file)
, então seu arquivo de áudio está pronto para ser tocado com a chamada parastart()
, no seu caso, como você quer que seja colocado em um botão, você terá que colocá-lo dentro doonClick
método.Exemplo:
fonte
existem alguns sons predefinidos: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING.
Agradável!
usar como:
fonte
Tente isso, acho que vai funcionar
fonte
criar um botão com um método pode ser chamado quando o botão pressionado (onCreate),
em seguida, crie uma variável para a classe (MediaPlayer) com o caminho do seu arquivo
finalmente execute o método start nessa classe
o arquivo será executado quando o botão for pressionado, espero que tenha sido útil!
fonte
Em vez de redefini-lo conforme proposto por DeathRs:
podemos apenas redefinir o MediaPlayer para o início usando:
fonte
Todas essas soluções "parecem" boas e razoáveis, mas há uma grande desvantagem. O que acontecerá se o seu cliente baixar seu aplicativo e pressionar repetidamente o botão?
Seu
MediaPlayer
às vezes vai deixar de jogar o seu som se você clicar no botão para muitas vezes.Eu tive esse problema de desempenho com a
MediaPlayer
classe alguns dias atrás.A
MediaPlayer
classe é salva para usar? Nem sempre. Se você tiver sons curtos, é melhor usar oSoundPool
classe.Uma solução econômica e eficiente é a classe SoundPool, que oferece ótimos recursos e aumenta o desempenho de seu aplicativo.
SoundPool não é tão fácil de usar quanto o
MediaPlayer
classe, mas tem alguns grandes benefícios quando se trata de desempenho e confiabilidade.Siga este link e aprenda a usar a classe SoundPool em seu aplicativo:
https://developer.android.com/reference/android/media/SoundPool
Youtube: Salvar solução
fonte