2010-02-19 5 views
6

Alles, was ich tun möchte, ist einfach Kontrolle Hintergrundmusik in meiner App durch einen Dienst, so dass ich in der Lage bin, es zu starten und es von jeder Aktivität zu stoppen.Android Service steuern MediaPlayer

Ich habe alles perfekt eingerichtet, wenn ich den Dienst zu Toast erzähle, wenn es gestartet und zerstört wird, aber sobald ich das Medium dort einspiele, beginnt es gut und beginnt mit dem Abspielen der Musik, aber sobald ein Klick ein Knopf, um den Dienst zu stoppen, bekomme ich einen Fehler und eine Kraft zu schließen.

Bitte jemanden helfen mir zu sehen, was ich falsch mache .. Ich bin ziemlich neu zu Android-Entwicklung, ich denke, es wird etwas leicht.

Hier ist mein Code:

import android.app.Service; 

import android.content.Intent; 

import android.media.MediaPlayer; 

import android.os.IBinder; 

import android.widget.Toast; 

public class MyService extends Service { 

    private MediaPlayer player; 

    @Override 
    public IBinder onBind(Intent intent) { 

     return null; 

    } 

    @Override 
    public void onCreate() { 

     super.onCreate(); 

     Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show(); 

     MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music); 

     player.start(); 

     player.setLooping(true); 

    } 

    @Override 
    public void onDestroy() { 

     super.onDestroy(); 

     player.stop(); 

     Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show(); 

    } 

} 
+0

Können Sie bitte den Fehler posten. Es scheint, dass Sie den Dienst falsch schließen :) Aber der Fehler wird uns sagen, was genau. – Steve

+0

Überprüfen Sie meine Antwort zu Ihrem doppelten Beitrag http://stackoverflow.com/questions/2298817/problem-with-my-android-service-please-help und sehen, ob das hilft – snctln

Antwort

0

onBind Methode gibt null nur dann, wenn es sich um eine "Local Service" ist. Wenn ich Sie richtig verstehe, möchten Sie Remote-Service erstellen.

zeigen den Remote-Service-Abschnitt in this reference site.

5

player.stop(); ----- diese Zeile Sie nullPointerException geben werden müssen.

private MediaPlayer player; Hier erstellen Sie nur Referenz. Das Objekt, das Sie in onCreate() erstellen, hat nur lokalen Gültigkeitsbereich. Bitte erstellen Sie ein Objekt mit einem Gültigkeitsbereich auf Klassenebene, dann wird es funktionieren.

0

Sie haben das Spielerobjekt in die OnCreate Verfahren lokale erklärt, die lokale Deklaration entfernen, siehe unten:

//MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.my_music); 
player = MediaPlayer.create(MyService.this, R.raw.my_music); 
0

Wie schrieb ** Rick D ** das Problem in den Mediaplayer erklärt wurde, Sie Spieler deklariert haben vor, einfach setzen:

player = MediaPlayer.create(ForegroundService.this, R.raw.my_music);