我对MediaPlayer onCompletion方法有问题。有没有办法在代码运行时改变声音并播放它?我试过这样的东西:
MediaPlayer player;
public void play() {
Database db = new Database(context);
if (player == null) {
player = MediaPlayer.create(context, R.raw.zvuk);
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
stopPlayer();
db.open();
var = db.randomItem();
db.close();
play();
player = MediaPlayer.create(context, R.raw.zvuk2);
play();
}
});
}
player.start();
}
public void stopPlayer() {
if (player != null) {
player.release();
player = null;
}
}
但当我运行这段代码时,第二个声音将不能正常工作--声音相互播放,当我用按钮暂停播放器时,它只会暂停“r.raw.zvuk”,但第二个播放器仍在播放。有人知道这个问题的解决方法吗?
谢谢你的帮助!
这段代码不是100%完整的,因为它的行为是:
但我选择对代码做最小的修改。
private static final String TAG = "MediaPlayerrrrr";
@Nullable
private AssetFileDescriptor mLastAssetFileDescriptor = null;
public void play() {
Database db = new Database(context);
if (player == null) {
player = MediaPlayer.create(context, R.raw.zvuk);
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(@NonNull final MediaPlayer mp) {
if (mLastAssetFileDescriptor != null) {
try { mLastAssetFileDescriptor.close(); } catch (IOException ignored) { /*nothing*/ }
mLastAssetFileDescriptor = null;
}
//----------- I don't know what this part do --------
db.open();
var = db.randomItem();
db.close();
//---------------------------------------------------
mLastAssetFileDescriptor = context.getResources().openRawResourceFd(R.raw.zvuk2);
try {
mp.setDataSource(mLastAssetFileDescriptor.getFileDescriptor(), mLastAssetFileDescriptor.getStartOffset(), mLastAssetFileDescriptor.getLength());
mp.start();
} catch (IOException e) {
Log.e(TAG, "Unable to set or play the new song: " + e.getMessage());
}
}
});
}
if (!player.isPlaying()) player.start();
else Log.e(TAG, "MediaPlayer is already playing a song!!");
}
我正在尝试设置一个具有声音的媒体播放器,可以根据需要多次播放和重播。但我在第一次播放音频时出现了以下错误: 我调用该剧的代码是: playSong()函数是: 我的声音位于res/raw/a.mp3中 当我按下BTN播放按钮时,我会显示BTN停止按钮,但没有播放任何内容。 我希望让用户玩、停、玩等等。我怎样才能做到这一点? LogCat:
问题是:我的Firebase从一个正常工作的文档获取信息(log.d和Toast显示它正确获取信息) 但是,在创建GameMenu activity时,包(savedInstanceState)为空,并且尝试获取该信息会给我带来异常。 非常感谢快速的帮助,我们在这里有点慌乱:(
我一直在win10上使用MediaPlayer,它工作得非常好,但是在我的MacBook Air(10.13.4 (17E202)上根本没有声音输出。我已经发现了类似的问题,并观察到它是由气相色谱引起的。 基于这样的答案我竭尽全力避免这件事 我试着让媒体播放器成为最终的、静态的、私有的、公共的,与getter和setter一起工作,外包,作为一个类变量,作为一个本地变量,但没有任何效果。 我正在运
我正在写一个程序,需要从存储器中播放一首歌曲。我为此设置了一个MediaPlayer(下面的代码片段),但一直使用java。io。IOException:准备失败:状态=0x1。一些网站指出,发生此错误的原因可能是我试图读取的文件不具有世界可读性。如果这是真的,我如何从程序中更改文件权限、绕过此问题或其他解决方案。如果没有,请帮我找出这有什么问题。提前谢谢。
问题内容: 我尝试做简单的在线广播播放器。这是流的地址http://radio-electron.ru:8000/96这是我的代码。 MyActivity.java main.xml 我不知道为什么我得到-(38,0)代码,这是什么意思。我使用Intellij IDEA,并在Android 2.3和4.2模拟器上尝试此代码,但遇到了一些问题。 问题答案: -38引用errno.h中的错误代码 您似
我有两个活动,家庭作业和更密切。我在家庭作业中播放了一首歌,但当按下一个按钮时,媒体播放器会暂停,并打开closer。在我的onPause函数中,我试图暂停媒体播放器,但它不起作用,activity越接近打开,音乐还在播放。之前,我将它设置为在activity家庭作业的按钮监听器中,媒体播放器暂停,但当我将它设置为onResume时,mediaplayer不会恢复。我想这可能是mediaplaye