我为SoundManagement创建了一个包,其中一个类扩展了MediaPlayer。我希望全局控制这个变量。这是我的代码:
package soundmanagement;
import android.content.Context;
import android.media.MediaPlayer;
import java.io.IOException;
public class MusicManager extends MediaPlayer {
public static MediaPlayer mediaPlayer = new MediaPlayer();
public void MusicManager() {
}
public static MediaPlayer create(Context context, int musicID) {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer.create(context, musicID);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
return mediaPlayer.create(context, musicID);
}
public void prepare() {
try {
mediaPlayer.prepare();
super.prepare();
} catch (IOException e) {
e.printStackTrace();
}
}
public void start() {
if (mediaPlayer != null) {
mediaPlayer.start();
}
super.start();
}
public void pause() {
mediaPlayer.pause();
super.pause();
}
public void stop() {
super.stop();
mediaPlayer.release();
}
public void release() {
mediaPlayer.release();
super.release();
}
public boolean isPlaying(boolean isPlaying) {
super.isPlaying();
return isPlaying;
}
public void setLooping(boolean setLoop) {
mediaPlayer.setLooping(setLoop);
super.setLooping(setLoop);
}
}
在我的MainActivity.class中,在onCreate()中,我所做的就是在onCreate()
中编写这段代码:
MusicManager.mediaPlayer.create(MainActivity.this, R.raw.riseofcc);
MusicManager.mediaPlayer.start();
应用程序编译并运行良好,一旦启动就不播放音乐。
答案 0 :(得分:1)
你对MediaPlayer采取了一种好奇的方法,但有一件事突然出现在我身上:
public static MediaPlayer create(Context context, int musicID) {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer.create(context, musicID);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
return mediaPlayer.create(context, musicID);
}
您调用mediaPlayer.create(),然后调用.prepare(),然后再次创建(...)?
此外,create是一个静态方法,因此它应该被称为MediaPlayer.create,你应该保持对它的引用。当您调用prepare()时,您正在对尚未创建的MediaPlayer对象调用prepare()。
编辑:如果您想保留此方法,请相应地修改它:
public static MediaPlayer create(Context context, int musicID) {
if (mediaPlayer != null) {
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(context, musicID);
try {
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
return mediaPlayer;
}