不操千曲而后晓声,观千剑而后识器。这篇文章主要讲述Android Media Player:开始调用状态4错误(-38,0)相关的知识,希望能为你提供帮助。
这是用于从其他类动态获取文件名(.mp3)的代码,因为我的assets文件夹中有很多mp3文件:
playAudioButton.setOnClickListener(new OnClickListener() {@Override
public void onClick(View v)
{
FileName audio=new FileName();
String audioName=audio.getAudioName(count).toString();
if(audioName=="NO Audio")
{Toast.makeText(getApplicationContext(), "No Audio for this page", Toast.LENGTH_SHORT).show();
}
else
{try {
afd=getAssets().openFd(audioName + ".mp3");
mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(),afd.getLength());
mp.prepareAsync();
mp.start();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
});
}
Log Cat:
03-20 11:21:28.726: E/SpannableStringBuilder(4418): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-20 11:21:28.726: E/SpannableStringBuilder(4418): SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length
03-20 11:22:24.968: D/libEGL(4579): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
03-20 11:22:24.976: D/libEGL(4579): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
03-20 11:22:24.984: D/libEGL(4579): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
03-20 11:22:25.070: D/OpenGLRenderer(4579): Enabling debug mode 0
03-20 11:22:38.773: E/MediaPlayer(4579): start called in state 4
03-20 11:22:38.773: E/MediaPlayer(4579): error (-38, 0)
03-20 11:22:38.773: E/MediaPlayer(4579): Error (-38,0)
需要注意的要点:1。我在堆栈溢出时检查了类似的线程,答案是使用prepareAsync()2。我使用了prepareAsync()
提前致谢。
答案您也可以使用下面的
onPrepared()
方法来调用start方法,以便在准备好start()
之后调用MediaPlayer
。mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stubmp.start();
}
});
另一答案而不是使用
preparedSync/prepare
的MediaPlayer
方法,你可以将文件路径转换为URI到MediaPlayer.create()
MediaPlayer mediaPlayer = MediaPlayer.create(context, URI.parse("file://"+filePath));
这将准备它并开始自己玩
或者另一种方式是使用
onPrepareListener()
的MediaPlayer
然后从准备开始播放另一答案状态4表示Mediaplayer正在准备状态
我们称之为其他行为
Mediaplayer.start()
Mediaplayer.stop()
Mediaplayer.pause()
或任何其他的东西。
根据你的代码,它是
Mediaplayer.start();
你需要写onprepare方法
MediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.start();
}
});
一旦调用了Onprepared()方法,就可以进行进一步的处理
【Android Media Player(开始调用状态4错误(-38,0))】只是删除
mp.start()
后
mp.prepareAsync();
你会很高兴
推荐阅读
- Android SDK AsyncTask doInBackground未运行(子类)
- Android AsyncTask在完成工作后返回值
- 如何解决MySQL异常SQLSTATE [HY000](常规错误:1364字段”field_name”没有默认值)
- 如何解决(解决方案)Google的”程序员”游戏(海龟级)
- 如何在CentOS中安装bcmath扩展
- 如何使用EventListener根据用户在Symfony 2.8中的角色将用户重定向到特定页面
- 如何在Symfony 3.4中使用MonologBu??ndle通过电子邮件自动报告异常
- 我应该使用’#’还是’javascript(void(0);’在我的空链接的href属性上)
- 如何在Symfony 1.4中检索当前模块的名称