2011-01-30 45 views
0

我正在構建一個使用媒體播放器類播放聲音的應用程序。Android:如何保持對媒體播放器的引用?

如果我使用後退按鈕進入菜單,然後重新打開應用程序的音樂仍在播放,但如果我打另一軌道時,應用程序似乎是創建一個新的媒體播放器。我無法放置參考保存的實例狀態,因爲它不是可串行化的。

什麼是保持基準推薦技術?

問候。

回答

2

我會建議你把你的MediaPlayer服務落後。我發現如何做到這一點以及綁定到該服務並播放媒體的一個很好的例子是NPR Radio應用程序,它是開源的。你可以找到源here

1

看看活動的生命週期圖,並確保你沒有創建多個MediaPlayer的對象,而不釋放舊的。 http://developer.android.com/reference/android/app/Activity.html

是否使用MediaPlayer.create()?分配一個新的MediaPlayer對象,但對舊的對象沒有任何作用。在第二次調用create()之前調用release()。

playSound(){ 
    mp.release(); 
    mp = MediaPlayer.create(); 
    mp.start(); 
} 

如果您正在手動管理它,請嘗試將您的呼叫置於這些地方。

onCreate(){ 
     mp=new MediaPlayer(); 
    } 
    onDestroy(){ 
     mp.release(); 
     wl.release(); 
    } 
    playSound(){ 
     mp.reset(); 
     mp.setDatasource(); 
     mp.prepare(); 
     mp.start(); 
    } 
    stopSound(){ 
    mp.reset(); 
    } 

爲了使聲音播放

onCreate(){ 
    PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE); 
    wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "com.pzizz"); 
} 
playSound(){  
    wl.acquire(); 
} 
onDestroy(){ 
    wl.release(); 
} 
stopSound(){ 
    wl.release(); 
} 

添加到您的艙單激活鎖定權限:

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
+0

如果我希望應用程序繼續播放聲音時,活動不活躍,做我需要實現一個服務? – 2011-01-30 17:00:42