2010-02-19 69 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()之前

讓我知道,如果這有助於在所有