2010-02-19 3 views
2

Tout ce que je veux faire est de simplement contrôler la musique de fond dans mon application via un service afin que je puisse le démarrer et l'arrêter de toute activité.Impossible de vérifier le service Android Problème

J'ai tout mis en place parfaitement quand je dis le service à Toast quand il est démarré et détruit mais dès que je mets le jeu média là-dedans au lieu Il commence très bien et commence à jouer de la musique, mais dès qu'un cliquez sur un bouton pour arrêter le service, j'obtiens une erreur et une force ferme.

Quelqu'un peut-il suggérer ce que je fais mal?

Voici mon 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) { 
returnnull; 
} 

@Override  
publicvoid onCreate() { 
super.onCreate(); 
Toast.makeText(this, "Service Started", Toast.LENGTH_SHORT).show(); 
MediaPlayer player = MediaPlayer.create(MyService.this, R.raw.oceanwavestest); 
player.start(); 
player.setLooping(true); 

} 

    @Override  
    publicvoid onDestroy() { 
    super.onDestroy(); 
    player.stop(); 
    Toast.makeText(this, "Service Stopped", Toast.LENGTH_SHORT).show(); 
    } 
} 
+2

Utilisez DDMS, 'adb logcat', ou la perspective DDMS dans Eclipse pour examiner la trace de la pile Java pour votre accident , pour déterminer où les choses vont mal. – CommonsWare

Répondre

0

Il y a quelques petites choses que je vois dans votre code que je vérifierais si j'étais à votre place.

  • Vous essayez d'appeler « stop » sur un membre MediaPlayer objet « joueur » dans votre OnDestroy, mais dans votre onCreate vous créez un objet MediaPlayer « joueur » avec votre ligne de code

" Lecteur MediaPlayer = MediaPlayer.create (MyService.this, R.raw.oceanwavestest); " Je crois que crée un objet joueur que vous perdrez la portée de l'extérieur de la fonction.

Le correctif 1 ligne pour ce code est à utiliser « joueur = MediaPlayer.create (MyService.this, R.raw.oceanwavestest) », de cette façon la variable membre est utilisée plutôt qu'une variable locale

Si c'était mon code, je changerais la variable membre pour qu'elle s'appelle quelque chose comme m_player ou mPlayer afin que vous sachiez que c'est une variable membre dans votre code.

  • (probablement une faute de frappe) "returnnull;" dans onBind devrait être "return null";

  • vous aussi pouvez essayer d'appeler

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

avant d'appeler super.onDestroy()

Laissez-moi savoir si cela aide à tous

Questions connexes