MainActivityでは、MediaPlayerを使用してバックグラウンドミュージックを再生します。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Music.playBGmusic(this, R.raw.main_music);
}
@Override
protected void onResume() {
super.onResume();
if ( ! Music.isPlaying(this) )
{
Music.playBGmusic(this, R.raw.main_music);
}
}
Music.javaの場合:
public class Music {
private static MediaPlayer mMainSound = null;
public static boolean isPlaying(Context context)
{
if ( mMainSound != null )
{
return mMainSound.isPlaying();
}
return false;
}
public static void playBGmusic(Context context, int resource)
{
if ( mMainSound != null ) mMainSound.release();
mMainSound = MediaPlayer.create(context, resource);
mMainSound.setLooping(true);
mMainSound.start();
}
public static void stopBGmusic(Context context) {
if (mMainSound != null) {
mMainSound.stop();
mMainSound.release();
mMainSound = null;
}
}
}
mMainSound
MediaPlayerオブジェクトはどこにありますか。MainActivityにボタンがあり、クリックするとインテントとstartActivity
そのインテントが作成されます。この新しいアクティビティはplayBGmusic
、別のサウンドで呼び出します。これで、その新しいアクティビティが呼び出さstopBGmusic()
れ finish()
てMainActivityに戻ると、onResume()
MainActivityのが期待どおりに呼び出され、バックグラウンドで再生main_music
されることになっています。実際に起こっているのは、音楽が1秒未満しか聞こえず、途切れてしまうことです。MediaPlayerを起動する前に試してみましprepare()
たが、それでも問題は解決しません。誰かが私のためにこの問題を明確にすることができれば非常にありがたいです。
finish()
それが重要かどうかはわかりませんが、新しいアクティビティのどこで呼び出されるかについても言及する必要があります。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
showDialog(1);
break;
}
return true;
}
@Override
protected Dialog onCreateDialog(int id) { //id is ignored
Dialog dialog = null;
AlertDialog.Builder builder;
builder = new AlertDialog.Builder(this);
builder.setMessage(R.string.return_home)
.setCancelable(true)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton(R.string.cancel, null);
dialog = builder.create();
return dialog;
}