我的问题是,在处理媒体播放器时,我不断遇到的问题不仅包括音频文件,还包括视频文件。当“播放按钮”被按下大约10次而不重新启动应用程序时,应用程序将停止并且LogCat将显示错误消息“E / MediaPlayer:error(1,-19)”。
我搜索过Stack以及媒体播放器上的Android开发者页面,但无法弄清楚如何解决这个问题。下面的代码似乎让我大约16次按下播放按钮,但没有更多。这比我尝试过的其他方法要多得多。
这个特殊的代码播放了短暂的动物声音让我的侄子认出来。我觉得我错过了媒体播放器的一些东西,但不能把手指放在它上面。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient"
tools:context="com.curiousca.griddemo.MainActivity">
<GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<Button
android:id="@+id/bluejay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/button_draw"
android:layout_margin="5dp"
android:layout_column="0"
android:layout_columnWeight="1"
android:layout_gravity="fill"
android:layout_row="0"
android:layout_rowWeight="1"
android:onClick="onClick"
android:text="Bluejay" />
</GridLayout>
`
public void onClick(View view) {
int id = view.getId();
String songId = "";
songId = view.getResources().getResourceEntryName(id);
int resourceId = getResources().getIdentifier(songId, "raw", getPackageName());
MediaPlayer mediaPlayer = MediaPlayer.create(this, resourceId);
if (mediaPlayer != null){
mediaPlayer.start();
}
//Log.i("Click", String.valueOf(view.getId()));
Log.i("tap", songId);
}
答案 0 :(得分:1)
swooby
实例化媒体播放器
private static MediaPlayer mediaPlayer;
public static MediaPlayer getMediaPlayer() {
return mediaPlayer;
最好将代码放在try / catch块中,以处理发生的任何异常
try {
if (btn == firstBird){
stopPlaying();
mediaPlayer = MediaPlayer.create(getActivity()
.getApplicationContext(),R.raw.bird_one);
mediaPlayer.start();
mediaPlayer.setLooping(true);
timerTextView.setText("15:00");
catch (IllegalStateException e){
stopPlaying();
}
创建其他方法以防止重写代码
“ stopPlaying()”方法有助于停止和释放媒体播放器。 应该调用此方法,以确保媒体播放器以前没有参与或从其他活动,片段或当前活动/片段中播放。
public void stopPlaying() {
if (mediaPlayer != null){
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
如果您要在倒数计时器内循环播放声音,请务必使用类似这样的方法...
@Override
public void onFinish() {
resetTimer();
stopPlaying();
}
在“停止按钮”代码中最后包含onCompletion()方法
if (btn == stopPlay){
onCompletion(mediaPlayer);
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (mediaPlayer != null && mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
}
通过这种方式,媒体播放器将停止并释放以进行下一个操作。