2010-02-19 58 views
2

我只想简单地通过服务在我的应用中控制背景音乐,这样我就可以启动它并停止任何活动。无法检查Android服务问题

当我告诉Toast服务在启动和销毁时,我已经完成了一切设置,但只要我把媒体播放放在那里,它就会启动正常并开始播放音乐,但只要点击一个按钮停止服务我得到一个错误和一个力量关闭。

任何人都可以建议我做错了什么?

这里是我的代码:

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

使用DDMS,ADB'logcat',或在Eclipse中DDMS角度来考察你崩溃了Java堆栈跟踪,以确定事情发生错误的地方。 – CommonsWare 2010-02-19 21:03:21

回答

0

有几件事情,我在你的代码中看到的,我想看看,如果我处在你的位置。

  • 您试图叫“停”在你的onDestroy成员MediaPlayer对象“玩家”,但在你的onCreate创建MediaPlayer对象“播放器”与您的代码

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

我相信创建一个玩家对象,你会松散功能的范围。

此代码的1行的解决办法是只使用“玩家= MediaPlayer.create(MyService.this,R.raw.oceanwavestest);”,这样的成员变量而不是使用一个局部变量

如果这是我的代码,我会改变成员变量被调用类似m_player或mPlayer,以便你知道它是你的代码中的成员变量。

  • (可能是错字)“returnnull;”在onBind中应该是“返回null”

  • 你可能也想尝试调用

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

调用super.onDestroy()之前

让我知道,如果这有助于在所有