2011-01-30 12 views
0

Media Playerクラスを使用してサウンドを再生するアプリケーションを作成しています。Android:Media Playerへの参照を維持するには?

メニューに戻ってアプリを再度開くと、音楽はまだ再生されていますが、別のトラックを再生すると、新しいメディアプレーヤーが作成されたようです。シリアル化されていないため、参照インスタンスを保存しておくことはできません。

リファレンスを保持するために推奨される手法は何ですか?

よろしくお願いいたします。

答えて

2

私はあなたがサービスの後ろにあなたのMediaPlayerを置く推薦する:wakelock権限のためのマニフェストにこれを追加し

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(); 
} 

を演奏音を維持するために

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

。私は、これを行う方法とそのサービスにバインドしてメディアを再生する方法の本当に良い例が、オープンソースであるNPRラジオアプリであることを発見しました。あなたはソースを見つけることができますhere

1

Activityのライフサイクル図を見て、古いものを公開せずに複数のMediaPlayerオブジェクトを作成していないことを確認してください。 http://developer.android.com/reference/android/app/Activity.html

MediaPlayer.create()を使用していますか?これは新しいMediaPlayerオブジェクトを割り当てますが、古いものには何もしません。 create()をもう一度呼び出す前にrelease()を呼び出します。

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

手動で管理している場合は、これらの場所に通話を試みてください。

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

私は、活動がアクティブでないときにサウンドを再生し続けたい場合、私はサービスを実装する必要がありますか? –

+0

wakelocksを使用するようにコードを更新しました。これはサウンドの再生を維持します。 –

関連する問題