【发布时间】:2016-06-29 21:30:49
【问题描述】:
我为 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();
应用程序编译并运行良好,只是启动后没有音乐播放。
【问题讨论】:
-
如果你的类扩展了
MediaPlayer,那么MusicManager对象就是一个MediaPlayer。那你为什么要创建一个新的MediaPlayer,这样你就有了两个MediaPlayers?你确定这是你想要的吗?也许这是你想要的,我不明白你的代码,但我以前见过那个错误。 -
@ajb... 我认为问题在于 MediaPlayer 没有公开很多内部工作,并将很多方法标记为最终方法。 ...但是,这仍然不是最佳方法。
-
是的,对不起,伙计们,我只是想成为一个在整个应用程序中通用的媒体播放器。我将有多个活动来操作它(暂停、启动、创建),我需要它以单独的格式。我尝试在每个 Activity 中使用单个 MediaPlayer,但很快事情就变得复杂了。
标签: java android android-mediaplayer