10 Stimmen

Hintergrundmusik Android

Okey, das ist mein Problem. Ich habe eine Service-Klasse, in der ich es geschafft habe, einen Media-Player zu erstellen, um die ganze Zeit Musik im Hintergrund abzuspielen. Hier ist der Code:

package com.test.brzoracunanje;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;

public class BackgroundSoundService extends Service {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {

    return null;
}
@Override
public void onCreate() {
    // TODO Auto-generated method stub
    super.onCreate();
       player = MediaPlayer.create(this, R.raw.test_cbr);
        player.setLooping(true); // Set looping
        player.setVolume(100,100);
        player.start();
}
@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);
}
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
}

protected void onNewIntent() {
    player.pause();
}
}

Aber jetzt habe ich ein Problem, wenn ich auf die HOME oder ZURÜCK Taste drücke. Die Musik spielt weiter. Weiß jemand, wie man dieses Problem lösen kann?

Und hier ist der Code, wie ich diesen Service in der Klasse aufrufe, in der ich die Musik abspielen möchte;

  Intent svc=new Intent(this, BackgroundSoundService.class);
    startService(svc);

0 Stimmen

Ich sehe nicht, wo das Problem ist... Wolltest du nicht die ganze Zeit Hintergrundmusik spielen lassen?

0 Stimmen

Ich möchte es die ganze Zeit spielen, während die Anwendung läuft, aber wenn ich die Home-Taste drücke, spielt die Musik immer noch.

26voto

Jong Punkte 8965

Wenn Sie nur Hintergrundmusik für Ihre App abspielen möchten, dann spielen Sie sie in einem Thread, der von Ihrer App gestartet wird / verwenden Sie die AsyncTask-Klasse, um dies für Sie zu erledigen.

Das Konzept von Services ist, im Hintergrund zu laufen; Mit Hintergrund ist normalerweise gemeint, wenn Ihre App-Benutzeroberfläche NICHT SICHTBAR ist. Ja, es kann verwendet werden, so wie Sie es haben (wenn Sie daran denken, es zu stoppen), aber es ist einfach nicht richtig und es verbraucht Ressourcen, die Sie nicht verwenden sollten.

Wenn Sie Aufgaben im Hintergrund Ihrer Aktivität ausführen möchten, verwenden Sie AsyncTask.

Übrigens, onStart ist veraltet. Wenn Sie Dienste verwenden, implementieren Sie onStartCommand.

UPDATE:

Ich denke, dieser Code wird für Sie funktionieren. Fügen Sie diese Klasse hinzu (innerhalb Ihrer Aktivitätsklasse).

public class BackgroundSound extends AsyncTask {

    @Override
    protected Void doInBackground(Void... params) {
        MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr); 
        player.setLooping(true); // Loop festlegen 
        player.setVolume(1.0f, 1.0f); 
        player.start(); 

        return null;
    }

}

Um die Musik zu steuern, speichern Sie jetzt Ihr BackgroundSound-Objekt anstelle es anonym zu erstellen. Deklarieren Sie es als Feld in Ihrer Aktivität:

BackgroundSound mBackgroundSound = new BackgroundSound();

Rufen Sie es in der onResume-Methode Ihrer Aktivität auf:

public void onResume() {
    super.onResume();
    mBackgroundSound.execute(null);
}

Und in der onPause-Methode Ihrer Aktivität, stoppen Sie es:

public void onPause() {
    super.onPause();
    mBackgroundSound.cancel(true);
}

Dies wird funktionieren.

0 Stimmen

Nur eine Frage. Muss ich eine neue Klasse BackgroundSound erstellen? oder diese unter der Klasse BackgroundSoundService platzieren, oder diese innerhalb meiner Hauptaktivitätsklasse platzieren?

1 Stimmen

In Ihrer Aktivitätsklasse, in der Sie die Sounds abspielen möchten. Es muss eine innere Klasse sein. Denken Sie daran, "YourActivity" (im Code) in Ihren Aktivitätsnamen zu ändern.

4 Stimmen

Ich habe es getestet. Es spielt Geräusche ab, wenn ich die App starte, aber das Problem ist, dass es immer noch Musik abspielt, wenn ich die HOME-Taste drücke und die App geschlossen ist?

2voto

aks Punkte 7312

AsyncTasks sind nur für sehr kurze Clips gut, aber wenn es sich um eine Musikdatei handelt, werden Sie Probleme haben wie:

  • Sie können die Musik nicht in der Mitte anhalten/pausieren. Für mich ist das ein echtes Problem.

Hier sind ein paar Zeilen von der Android-Entwicklerseite über AsyncTasks

AsyncTasks sollten idealerweise für kurze Operationen (maximal einige Sekunden) verwendet werden. Wenn Sie Threads für lange Zeiträume laufen lassen müssen, wird dringend empfohlen, die verschiedenen von java.util.concurrent bereitgestellten APIs wie Executor, ThreadPoolExecutor und FutureTask zu verwenden.

Derzeit suche ich nach anderen Optionen und werde die Antwort aktualisieren, sobald ich die Lösung gefunden habe.

0voto

trashkalmar Punkte 893

Klar, Ihr Dienst läuft im Hintergrund und Sie müssen ihn manuell von Ihrer Aktivität stoppen, wenn er in den Hintergrund wechselt.

0voto

Srinivas Punkte 1375

Ja, du solltest den Service stoppen, wenn du die Home-Taste drückst. In der OnPause(){}-Methode überschreibst du den Service und stoppst die Musik. Und innerhalb des Service in der OnDestroy()-Methode bitte stoppe den Media Player. Also ruft das Drücken der Home-Taste die OnPause() auf und die OnPause() -> stoppt den Service und OnDestroy wird im Service ausgeführt und in OnDestroy() wird der Media Player gestoppt und dein Problem ist behoben.

0voto

Schreiben Sie den folgenden Code in Ihrer onStop-Methode:

System.exit(0);

Dadurch wird Ihr Mediaplayer beendet, wenn Sie die Zurück-/Home-Taste drücken oder die Anwendung schließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X