Bagaimana cara mendapatkan tombol untuk memutar suara mentah saat diklik? Saya baru saja membuat tombol dengan id button1
, tetapi kode apa pun yang saya tulis, semuanya salah.
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);
. Jika demikian, perpustakaan ini mungkin untuk Anda: github.com/delight-im/Android-AudioJawaban:
Ini adalah bagian terpenting dari kode yang disediakan di postingan asli.
Untuk menjelaskannya selangkah demi selangkah:
Pertama adalah inisialisasi tombol yang akan digunakan dalam memainkan suara. Kita menggunakan Activity
findViewById
, meneruskan Id yang kita tetapkan padanya (dalam contoh kasus ini :)R.id.button1
, untuk mendapatkan tombol yang kita butuhkan. Kami memasukkannya sebagaiButton
sehingga mudah untuk menugaskannya ke variabelone
yang kami inisialisasi. Menjelaskan lebih lanjut tentang cara kerjanya berada di luar cakupan jawaban ini. Ini memberikan wawasan singkat tentang cara kerjanya.Ini adalah cara menginisialisasi file
MediaPlayer
. MediaPlayer mengikuti Pola Desain Metode Pabrik Statis . Untuk mendapatkan sebuah instance, kita memanggilcreate()
metodenya dan meneruskannya ke konteks dan ID sumber daya dari suara yang ingin kita mainkan, dalam kasus iniR.raw.soho
. Kami menyatakannya sebagaifinal
. Jon Skeet memberikan penjelasan yang bagus tentang mengapa kami melakukannya di sini .Akhirnya, kami mengatur apa yang akan dilakukan tombol yang diinisialisasi sebelumnya. Mainkan suara dengan mengklik tombol! Untuk melakukan ini, kami mengatur
OnClickListener
tombol kamione
. Di dalamnya hanya ada satu metode,onClick()
yang berisi instruksi apa yang harus dilakukan tombol saat diklik .Untuk memutar suara, kami memanggil
start()
metode MediaPlayer . Metode ini memulai pemutaran suara.Di sana, Anda sekarang dapat memutar suara dengan mengklik tombol di Android!
Bagian bonus:
Seperti yang tercantum dalam komentar di bawah Terima kasih Langusten Gustel! , dan seperti yang direkomendasikan dalam Referensi Pengembang Android , penting untuk memanggil
release()
metode untuk mengosongkan sumber daya yang tidak akan digunakan lagi. Biasanya, ini dilakukan setelah suara yang akan dimainkan selesai dimainkan. Untuk melakukannya, kami menambahkan sepertiOnCompletionListener
kamimp
:Di dalam
onCompletion
metode, kami merilisnya seperti ini:Jelas ada cara yang lebih baik untuk menerapkan ini. Misalnya, Anda dapat menjadikan MediaPlayer sebagai variabel kelas dan menangani siklus prosesnya bersama dengan siklus proses
Fragment
atauActivity
yang menggunakannya. Namun, ini adalah topik untuk pertanyaan lain. Untuk menjaga cakupan jawaban ini kecil, saya menulisnya hanya untuk mengilustrasikan cara memutar suara saat klik tombol di Android .Posting Asli
Pertama. Anda harus meletakkan pernyataan Anda di dalam blok, dan dalam hal ini metode onCreate.
Kedua. Anda menginisialisasi tombol sebagai variabel satu , lalu Anda menggunakan variabel nol dan menyetel onClickListenernya menjadi onClickListener yang tidak lengkap. Gunakan variabel satu untuk setOnClickListener.
Ketiga, letakkan logika untuk memutar suara di dalam onClick.
Singkatnya:
sumber
RELEASE
Teruji dan bekerja 100%
Hanya ini yang harus kami lakukan
sumber
Cara terbaik untuk melakukan ini ada di sini yang saya temukan setelah mencari satu masalah demi satu masalah di LogCat
Tidak merilis Pemutar media memberi Anda kesalahan ini di LogCat:
Tidak mengatur ulang Pemutar media memberi Anda kesalahan ini di LogCat:
Jadi mainkan kode yang aman dan sederhana untuk menggunakan pemutar media.
Untuk memainkan lebih dari satu suara dalam Aktivitas / Fragmen yang sama, cukup ubah resID sambil membuat pemutar Media baru seperti
dan mainkan!
Selamat bersenang-senang!
sumber
sumber
raw
folder, jika tidak ada, buat satu.-
karakter apa pun atau karakter khusus di dalamnya.Pada aktivitas Anda, Anda perlu memiliki objek
MediaPlayer
, di dalamonCreate
metode atauonclick
metode, Anda harus menginisialisasiMediaPlayer
, sepertiMediaPlayer.create(this, R.raw.name_of_your_audio_file)
, kemudian file audio Anda siap untuk diputar dengan panggilanstart()
, dalam kasus Anda, karena Anda menginginkannya ditempatkan di sebuah tombol, Anda harus memasukkannya ke dalamonClick
metode.Contoh:
sumber
ada beberapa suara standar: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING.
Bagus!
gunakan seperti:
sumber
Coba ini saya pikir itu akan berhasil
sumber
membuat tombol dengan metode bisa dipanggil saat tombol ditekan (onCreate),
lalu buat variabel untuk kelas (MediaPlayer) dengan jalur file Anda
akhirnya jalankan metode start di kelas itu
file akan berjalan saat tombol ditekan, semoga bermanfaat!
sumber
Alih-alih mengatur ulang seperti yang diusulkan oleh DeathRs:
kita bisa mengatur ulang MediaPlayer untuk mulai menggunakan:
sumber
Semua solusi ini "terdengar" bagus dan masuk akal, tetapi ada satu kelemahan besar. Apa yang terjadi jika pelanggan Anda mengunduh aplikasi Anda dan berulang kali menekan tombol Anda?
Anda
MediaPlayer
kadang-kadang akan gagal untuk memutar suara Anda jika Anda mengklik tombol untuk berkali-kali.Saya mengalami masalah kinerja ini dengan
MediaPlayer
kelas beberapa hari yang lalu.Apakah
MediaPlayer
kelas tersebut aman untuk digunakan? Tidak selalu. Jika Anda memiliki suara yang pendek, lebih baik menggunakanSoundPool
kelas.Solusi hemat dan efisien adalah kelas SoundPool yang menawarkan fitur-fitur hebat dan meningkatkan kinerja aplikasi Anda.
SoundPool tidak mudah digunakan seperti
MediaPlayer
kelasnya, tetapi memiliki beberapa manfaat besar dalam hal kinerja dan keandalan.Ikuti tautan ini dan pelajari cara menggunakan kelas SoundPool di aplikasi Anda:
https://developer.android.com/reference/android/media/SoundPool
Youtube: Simpan Solusi
sumber
Kasus tepi: Di atas setiap jawaban hampir benar tetapi saya terjebak dalam kasus tepi. Jika ada pengguna yang secara acak mengklik tombol beberapa kali dalam beberapa detik, maka setelah memainkan beberapa suara, ia tidak merespons lagi.
Alasan: Menginisialisasi
Mediaplayer
objek sangat mahal. Ini juga berhubungan dengan sumber daya ( file audio ) sehingga butuh waktu untuk itu. Ketika pengguna secara acak initialize dan memanggil metodeMediaPlayer
metode 's sepertistart()
,stop()
,release()
, dll dapat menyebabkanIllegalStateException
yang saya hadapi.Solusi: Terima kasih gak untuk saran di komentar tentang Android-Audio . Ini hanya memiliki dua kelas java sederhana (
MusicManager.java
,SoundManager.java
).Anda dapat menggunakan
MusicManager.java
jika Anda ingin memutar file suara satu kali -Anda dapat menggunakan
SoundManager.java
jika Anda ingin memainkan banyak suara secara sering dan cepat -sumber