Wie bekomme ich eine Schaltfläche, um beim Klicken einen Sound von Raw abzuspielen? Ich habe gerade eine Schaltfläche mit ID erstellt button1
, aber welcher Code auch immer ich schreibe, alles ist falsch.
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);
. Wenn ja, könnte diese Bibliothek für Sie sein: github.com/delight-im/Android-AudioAntworten:
Dies ist der wichtigste Teil des Codes im ursprünglichen Beitrag.
Um es Schritt für Schritt zu erklären:
Zunächst wird die Taste initialisiert, die zum Abspielen des Sounds verwendet werden soll. Wir verwenden die Aktivitäten und
findViewById
übergeben die ID, die wir ihr zugewiesen haben (in diesem Beispiel :)R.id.button1
, um die Schaltfläche zu erhalten, die wir benötigen. Wir haben esButton
so umgewandelt, dass es einfach ist, es der Variablen zuzuweisen, dieone
wir initialisieren. Mehr darüber zu erklären, wie dies funktioniert, ist für diese Antwort nicht möglich. Dies gibt einen kurzen Einblick in die Funktionsweise.So initialisieren Sie a
MediaPlayer
. Der MediaPlayer folgt dem Entwurfsmuster der statischen Factory-Methode . Um eine Instanz zu erhalten, rufen wir ihrecreate()
Methode auf und übergeben ihr in diesem Fall den Kontext und die Ressourcen-ID des Sounds, den wir abspielen möchtenR.raw.soho
. Wir erklären es alsfinal
. Jon Skeet lieferte eine großartige Erklärung, warum wir dies hier tun .Schließlich legen wir fest, was unsere zuvor initialisierte Schaltfläche tun soll. Spielen Sie einen Sound auf Knopfdruck! Dazu setzen wir den
OnClickListener
Knopfone
. Im Inneren befindet sich nur eine Methode,onClick()
die enthält, welche Anweisungen die Schaltfläche beim Klicken ausführen soll .Um den Sound abzuspielen, rufen wir MediaPlayer an
start()
Methode von . Diese Methode startet die Wiedergabe des Sounds.Dort können Sie jetzt einen Sound auf Knopfdruck in Android abspielen!
Bonus-Teil:
Wie im Kommentar unten erwähnt, danke Langusten Gustel! Wie in der Android-Entwicklerreferenz empfohlen , ist es wichtig, die
release()
Methode aufzurufen , um Ressourcen freizugeben, die nicht mehr verwendet werden. Normalerweise erfolgt dies, sobald der abzuspielende Sound wiedergegeben ist. Dazu fügen wirOnCompletionListener
unseremmp
Like Folgendes hinzu:Innerhalb der
onCompletion
Methode veröffentlichen wir es wie folgt:Es gibt offensichtlich bessere Möglichkeiten, dies umzusetzen . Beispielsweise können Sie den MediaPlayer zu einer Klassenvariablen machen und seinen Lebenszyklus zusammen mit dem Lebenszyklus des
Fragment
oder des Benutzers behandelnActivity
. Dies ist jedoch ein Thema für eine andere Frage. Um den Umfang dieser Antwort klein zu halten, habe ich sie geschrieben, um zu veranschaulichen, wie ein Sound beim Klicken auf eine Schaltfläche in Android abgespielt wird .Ursprünglicher Beitrag
Zuerst. Sie sollten Ihre Anweisungen in einen Block einfügen, in diesem Fall die onCreate-Methode.
Zweite. Sie haben die Schaltfläche als Variable Eins initialisiert , dann eine Variable Null verwendet und ihren onClickListener auf einen unvollständigen onClickListener gesetzt. Verwenden Sie die Variable one für den setOnClickListener.
Drittens setzen Sie die Logik, um den Sound in onClick abzuspielen.
Zusammenfassend:
quelle
RELEASE
Getestet und 100% funktionsfähig
Das war alles was wir tun mussten
quelle
Der beste Weg, dies zu tun, ist hier, nachdem ich in LogCat nach einem Problem nach dem anderen gesucht habe
Wenn Sie den Media Player nicht freigeben , wird in LogCat der folgende Fehler angezeigt:
Wenn Sie den Media Player nicht zurücksetzen , wird in LogCat der folgende Fehler angezeigt:
Spielen Sie also sicheren und einfachen Code, um den Media Player zu verwenden.
Um mehr als einen Sound in derselben Aktivität / demselben Fragment abzuspielen, ändern Sie einfach die resID, während Sie einen neuen Media Player wie erstellen
und spiel es!
Habe Spaß!
quelle
quelle
raw
Ordner Wenn es nicht vorhanden ist, erstellen Sie einen.-
oder Sonderzeichen enthalten.Auf Ihrer Aktivität, müssen Sie ein Objekt haben
MediaPlayer
, innerhalb desonCreate
Verfahrens oder dieonclick
Methode, müssen Sie die InitialisierungMediaPlayer
, wieMediaPlayer.create(this, R.raw.name_of_your_audio_file)
dann die Audiodatei ir bereit , mit der Aufforderung zur abgespielt wirdstart()
, in Ihrem Fall, da Sie es sein wollen Wenn Sie es in eine Schaltfläche einfügen, müssen Sie es in dieonClick
Methode einfügen.Beispiel:
quelle
Es gibt einige vordefinierte Sounds: SHUTTER_CLICK, FOCUS_COMPLETE, START_VIDEO_RECORDING, STOP_VIDEO_RECORDING.
Nett!
Verwenden Sie wie:
quelle
Versuchen Sie dies, ich denke, es wird funktionieren
quelle
Erstellen einer Schaltfläche mit einer Methode kann aufgerufen werden, wenn die Schaltfläche gedrückt wird (onCreate).
Erstellen Sie dann eine Variable für die Klasse (MediaPlayer) mit dem Pfad Ihrer Datei
Führen Sie schließlich die Startmethode in dieser Klasse aus
Die Datei wird ausgeführt, wenn die Taste gedrückt wird. Ich hoffe, dies war hilfreich!
quelle
Anstatt es wie von DeathRs vorgeschlagen zurückzusetzen:
Wir können den MediaPlayer einfach so zurücksetzen, dass er verwendet wird:
quelle
Alle diese Lösungen "klingen" nett und vernünftig, aber es gibt einen großen Nachteil. Was passiert, wenn Ihr Kunde Ihre Anwendung herunterlädt und wiederholt auf Ihre Schaltfläche drückt?
Ihre
MediaPlayer
können Ihren Sound manchmal nicht abspielen, wenn Sie zu oft auf die Schaltfläche klicken.Ich bin vor
MediaPlayer
ein paar Tagen mit der Klasse auf dieses Leistungsproblem gestoßen.Ist die
MediaPlayer
Klasse sicher zu verwenden? Nicht immer. Wenn Sie kurze Töne haben, ist es besser, die zu verwendenSoundPool
Klasse zu verwenden.Eine sichere und effiziente Lösung ist die SoundPool-Klasse, die großartige Funktionen bietet und die Leistung Ihrer Anwendung erhöht.
SoundPool ist nicht so einfach zu bedienen wie das
MediaPlayer
Klasse, bietet jedoch einige große Vorteile in auf Leistung und Zuverlässigkeit.Folgen Sie diesem Link und erfahren Sie, wie Sie die SoundPool-Klasse in Ihrer Anwendung verwenden:
https://developer.android.com/reference/android/media/SoundPool
Youtube: Lösung speichern
quelle