Android的MediaPlayer的完成而不释放 [英] Android MediaPlayer finalized without being released

查看:3929
本文介绍了Android的MediaPlayer的完成而不释放的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建一个测验应用程序。经过10至12个问题,Medvoice不正确后或错误正在添加的问题。我得到这个错误的MediaPlayer(-19,0)和设置缓存,名称=启用sound_effects,值= 0。请指导我解决这个错误。谢谢


我用这code。声音是可播放为8至10倍,然后声音消失。如果我们等待一些二,一段时间后,再次点击按钮,声音开始播放。此外,它在一段时间后崩溃。

 包com.kids_fun;进口java.util.Arrays中;
进口java.util.Collections中;
进口了java.util.Random;
进口android.media.MediaPlayer;
进口android.os.Bundle;
进口android.os.CountDownTimer;
进口android.os.Handler;
进口android.app.Activity;
进口android.app.AlertDialog;
进口android.app.Dialog;
进口android.content.DialogInterface;
进口android.content.Intent;
进口android.graphics.Color;
进口android.graphics.drawable.ColorDrawable;
进口android.view.Menu;
进口android.view.View;
进口android.view.Window;
进口android.widget.Button;
进口android.widget.ImageView;
进口android.widget.RadioButton;
进口android.widget.RadioGroup;
进口android.widget.RadioGroup.OnCheckedChangeListener;
进口android.widget.TextView;
进口android.widget.Toast;公共类HardAddition延伸活动{RadioGroup中选择;
单选ANSWER1,ANSWER2,ANSWER3;TextView的NUM1,NUM2,计数器,应答check_answer1;INT结果,Z,得分= 00;最后随机兰特=新的随机();CountDownTimer定时器1;按钮提交,下一步;ImageView的图像;MediaPlayer的熔点;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_hard__addition);    //获取单选按钮,TextViews
    选项​​=(RadioGroup中)findViewById(R.id.Hard_Add_RdGrp);
    ANSWER1 =(单选)findViewById(R.id.Hard_Add_answer1);
    ANSWER2 =(单选)findViewById(R.id.Hard_Add_Answer2);
    ANSWER3 =(单选)findViewById(R.id.Hard_Add_Answer3);    NUM1 =(的TextView)findViewById(R.id.Hard_Add_Num1_ID);
    NUM2 =(的TextView)findViewById(R.id.Hard_Add_Num2_ID);
    计数器=(的TextView)findViewById(R.id.Hard_Additon_Counter);
    答案=(的TextView)findViewById(R.id.Hard_Additon_Answer);
    check_answer1 =(的TextView)findViewById(R.id.Hard_Addition_checked_answer);    图像=(ImageView的)findViewById(R.id.Hard_Addition_ImageView);
    //设置定时器    定时器1 =新CountDownTimer(15000,1000){
        公共无效onTick(长millisUntilFinished){
            Counter.setText(
                    + formatTime(millisUntilFinished));
        }        私人字符串formatTime(long millis)来{
            // TODO自动生成方法存根            字符串输出=00;
            长秒=米利斯/ 1000;
            //长分钟=秒/ 60;            秒秒= 60%;
            //分钟=分钟%60;            字符串secondsD =将String.valueOf(秒);
            //字符串minutesD =将String.valueOf(分钟);            如果(秒-1,10)
            {secondsD =0+秒;            }
            //如果(分钟小于10)
            // minutesD =0+分钟;            输出= secondsD;
            返回输出;        }        公共无效onFinish(){
            Counter.setText();
            // Counter_Dialog();
            CustomDialogClass CDD =新CustomDialogClass(HardAddition.this);
            cdd.getWindow()setBackgroundDrawable(新ColorDrawable(Color.TRANSPARENT));
            cdd.show();
        }
    };    //调用方法来生成随机数    getRandom();    //启动定时器    timer1.start();    options.setOnCheckedChangeListener(新OnCheckedChangeListener(){        @覆盖
        公共无效onCheckedChanged(RadioGroup中为arg0,ARG1 INT){
            // TODO自动生成方法存根            检查答案();
        }
    });    //提交按钮,查看答案
    提交=(按钮)findViewById(R.id.Hrd_AddOK_Btn_ID);;    Submit.setOnClickListener(新View.OnClickListener(){        @覆盖
        公共无效的onClick(查看为arg0){
            // TODO自动生成方法存根
            MediaPlayer的MP = MediaPlayer.create(HardAddition.this,R.raw.tick);
            mp.start();
            timer1.cancel();
            Submit.setVisibility(View.INVISIBLE);            //调用方法,它会检查下面定义的答案            是正确的();        }
    });
}
//方法生成随机数
公共无效getRandom()
{
     INT FirstNum = rand.nextInt((1000-500)+1)+500;     Num1.setText(将String.valueOf(FirstNum));     INT SecondNum = rand.nextInt((5000-1000)+1)+1000;     Num2.setText(将String.valueOf(SecondNum));     INT X =的Integer.parseInt(Num1.getText()的toString());
     INT Y =的Integer.parseInt(Num2.getText()的toString());     结果= X + Y;     answer2.setText(将String.valueOf(结果));   INT option_value1;     做{        option_value1 = rand.nextInt((2000-500)+1)+500;     }
     而(option_value1 ==结果);     answer1.setText(将String.valueOf(option_value1));    INT option_value2;     做{        option_value2 = rand.nextInt((3000-1500)+1)+1500;     }
     而(option_value2 ==结果);     answer3.setText(将String.valueOf(option_value2));     int类型的=的Integer.parseInt(answer1.getText()的toString());
     INT B =的Integer.parseInt(answer2.getText()的toString());
     INT C =的Integer.parseInt(answer3.getText()的toString());
     整数[]选项= {A,B,C};
     Collections.shuffle(Arrays.asList(选项));     //赋值的选择     一个=项[0];
     B =项[1];
     C =选项[2];     answer1.setText(将String.valueOf(一));
     answer2.setText(将String.valueOf(B));
     answer3.setText(将String.valueOf(C));
    }//方法来检查答案 公共无效isCorrect()
 {
    如果(answer1.isChecked()==假放;&安培; answer2.isChecked()==假放;&安培; answer3.isChecked()== FALSE)
       {         Toast.makeText(getApplicationContext(),请选择一个选项,Toast.LENGTH_SHORT).show();
         Submit.setVisibility(View.VISIBLE);
       }    否则如果(answer1.isChecked())
    {
        Image.setVisibility(View.VISIBLE);
        Z =的Integer.parseInt(answer1.getText()的toString());
        如果(Z ==结果)
        {
            //显示图像            Image.setBackgroundResource(R.drawable.a);            //播放声音            MP = MediaPlayer.create(HardAddition.this,R.raw.wow);
            mp.start();            // Increamenting分数            increamentscore();            //生成新问题            最后的处理程序处理程序=新的处理程序();                    handler.postDelayed(新的Runnable(){                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根                     问题();
                     answer1.setChecked(假);
                     answer2.setChecked(假);
                     answer3.setChecked(假);
                     mp.stop();
                     mp.release();                }
            },3500);        }
        其他{            //显示图像            Image.setBackgroundResource(R.drawable.r);            //播放声音            MP = MediaPlayer.create(HardAddition.this,R.raw.okay);
            mp.start();            最后的处理程序处理程序=新的处理程序();                    handler.postDelayed(新的Runnable(){                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根                     问题();
                     answer1.setChecked(假);
                     answer2.setChecked(假);
                     answer3.setChecked(假);
                     mp.stop();
                     mp.release();                }
            },3500);
        }    }    否则如果(answer2.isChecked())
    {Image.setVisibility(View.VISIBLE);
        Z =的Integer.parseInt(answer2.getText()的toString());
        如果(Z ==结果)
        {            //显示图像            Image.setBackgroundResource(R.drawable.b);            //播放声音            MP = MediaPlayer.create(HardAddition.this,R.raw.wow);
            mp.start();            Increamenting分数            increamentscore();            最后的处理程序处理程序=新的处理程序();                    handler.postDelayed(新的Runnable(){                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根                     问题();
                     answer1.setChecked(假);
                     answer2.setChecked(假);
                     answer3.setChecked(假);
                     mp.stop();
                     mp.release();                }
            },3500);        }
        其他{
            //显示图像            Image.setBackgroundResource(R.drawable.r);            //播放声音            MP = MediaPlayer.create(HardAddition.this,R.raw.okay);
            mp.start();            最后的处理程序处理程序=新的处理程序();                    handler.postDelayed(新的Runnable(){                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根                     问题();
                     answer1.setChecked(假);
                     answer2.setChecked(假);
                     answer3.setChecked(假);
                     mp.stop();
                     mp.release();                }
            },3500);        }
    }    否则如果(answer3.isChecked())
    {
        Image.setVisibility(View.VISIBLE);
        Z =的Integer.parseInt(answer3.getText()的toString());
        如果(Z ==结果)
        {            //显示图像            Image.setBackgroundResource(R.drawable.a);            //播放声音            MP = MediaPlayer.create(HardAddition.this,R.raw.wow);
            mp.start();            increamentscore();            最后的处理程序处理程序=新的处理程序();                handler.postDelayed(新的Runnable(){                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根                     问题();
                     answer1.setChecked(假);
                     answer2.setChecked(假);
                     answer3.setChecked(假);
                     mp.stop();
                     mp.release();                }
            },3500);
        }
        其他{            //显示图像            Image.setBackgroundResource(R.drawable.r);            //播放声音            MP = MediaPlayer.create(HardAddition.this,R.raw.okay);
            mp.start();            最后的处理程序处理程序=新的处理程序();                    handler.postDelayed(新的Runnable(){                @覆盖
                公共无效的run(){
                    // TODO自动生成方法存根                     问题();
                     answer1.setChecked(假);
                     answer2.setChecked(假);
                     answer3.setChecked(假);
                     mp.stop();
                     mp.release();                }
            },3500);        }}
}    公共无效Counter_Dialog(){    最后AlertDialog.Builder建设者=新AlertDialog.Builder(本);    builder.setTitle(时间到了!)
            .setMessage(
                    你的时间到了,preSS下一步将移动到下一个问题)
            // .setIcon(android.R.drawable.ic_dialog_alert)
            .setPositiveButton(下一步,
                    新DialogInterface.OnClickListener(){
                        公共无效的onClick(DialogInterface对话框,
                                其中INT){                            熔点= MediaPlayer.create(getApplicationContext(),R.raw.tick);
                            mp.start();
                            问题();
                            //timer1.start();
                            answer1.setChecked(假);
                            answer2.setChecked(假);
                            answer3.setChecked(假);                        }
                    })
            // .setNegativeButton(否,空)
            。显示();}
// Increamenting分数公众诠释increamentscore(){    如果(分数< 99)
    {
        得分=得分+ 1;
        Answer.setText(将String.valueOf(分数));    }    其他{         得分= 0;
    }
    返回分数;
}
//生成新问题公共无效的问题(){                    Image.setVisibility(View.GONE);
            getRandom();
            timer1.start();
            options.clearCheck();
            check_answer1.setText(将String.valueOf());
            Submit.setVisibility(View.VISIBLE);}
 //由用户检查托运答案的价值公共无效check_answer()
{INTÿ;    开关(opt​​ions.getCheckedRadioButtonId())
    {案例R.id.Hard_Add_answer1:
    Y =的Integer.parseInt(answer1.getText()的toString());
    check_answer1.setText(将String.valueOf(Y));
    打破;案例R.id.Hard_Add_Answer2:
    Y =的Integer.parseInt(answer2.getText()的toString());
    check_answer1.setText(将String.valueOf(Y));
打破;案例R.id.Hard_Add_Answer3:
    Y =的Integer.parseInt(answer3.getText()的toString());
    check_answer1.setText(将String.valueOf(Y));
    打破;    }}
//对话,其中将显示在当时间到了公共类CustomDialogClass扩展对话框implementsandroid.view.View.OnClickListener
{公共活动℃;
公众对话D组;
公共CustomDialogClass(活动){
超级(一);
// TODO自动生成构造函数存根
this.c =一个;
}@覆盖
 保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
的setContentView(R.layout.dialog_box);
下一步=(按钮)findViewById(R.id.dialog_Next);
Next.setOnClickListener(本);}@覆盖
公共无效的onClick(视图v){
开关(v.getId()){
案例R.id.dialog_Next:
 熔点= MediaPlayer.create(getApplicationContext(),R.raw.tick);
 mp.start();
 问题();
  打破;
 默认:
  打破;
 }
 解雇();
}
}
@覆盖
公共布尔onCreateOptionsMenu(菜单菜单){
    //充气菜单;如果是present这增加了项目操作栏。
    。getMenuInflater()膨胀(R.menu.hard__addition,菜单);
    返回true;
}}


解决方案

错误的MediaPlayer(-19,0),因为来自同一个参考,你可以调用只有18次。

您需要释放时的MediaPlayer完成;

  MediaPlayer的熔点为新的MediaPlayer(); MP prepare()。
 mp.start();mp.setOnCompletionListener(新OnCompletionListener(){        @覆盖
        公共无效onCompletion(MediaPlayer的MP){
            mp.release();        }
    });

I am creating a quiz app. After 10 to 12 questions, Medvoice is not comming after correct or wrong question. I am getting this error MediaPlayer (-19, 0) and From settings cache, name=sound_effects enabled, value=0. Please guide me to overcome this error. Thanks


I am using this code. Sound is playable for 8 to 10 times, then voice disappears. If we wait for some second and click button again after some time, sounds starts playing. Also it is crashing after some time.

package com.kids_fun;

import java.util.Arrays;
import java.util.Collections;
import java.util.Random;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class HardAddition extends Activity {

RadioGroup options;
RadioButton answer1,answer2, answer3;

TextView Num1,Num2,Counter, Answer,check_answer1;

int Result, z, Score=00;

final Random rand= new Random();    

CountDownTimer timer1;

Button Submit,Next;

ImageView Image;

MediaPlayer mp;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hard__addition);

    // Getting RadioButtons, TextViews


    options=(RadioGroup)findViewById(R.id.Hard_Add_RdGrp);
    answer1=(RadioButton)findViewById(R.id.Hard_Add_answer1);
    answer2=(RadioButton)findViewById(R.id.Hard_Add_Answer2);
    answer3=(RadioButton)findViewById(R.id.Hard_Add_Answer3);

    Num1=(TextView)findViewById(R.id.Hard_Add_Num1_ID);
    Num2=(TextView)findViewById(R.id.Hard_Add_Num2_ID);
    Counter=(TextView)findViewById(R.id.Hard_Additon_Counter);
    Answer=(TextView)findViewById(R.id.Hard_Additon_Answer);
    check_answer1=(TextView)findViewById(R.id.Hard_Addition_checked_answer);

    Image=(ImageView)findViewById(R.id.Hard_Addition_ImageView);


    //Setting Timer

    timer1 = new CountDownTimer(15000, 1000) {
        public void onTick(long millisUntilFinished) {
            Counter.setText(""
                    + formatTime(millisUntilFinished));


        }

        private String formatTime(long millis) {
            // TODO Auto-generated method stub

            String output = "00";
            long seconds = millis / 1000;
            //long minutes = seconds / 60;

            seconds = seconds % 60;
            //minutes = minutes % 60;

            String secondsD = String.valueOf(seconds);
            //String minutesD = String.valueOf(minutes);

            if (seconds < 10)
            {   secondsD = "0" + seconds;

            }
            //if (minutes < 10)
            //  minutesD = "0" + minutes;

            output =secondsD;
            return output;

        }

        public void onFinish() {
            Counter.setText("");
            //Counter_Dialog();
            CustomDialogClass cdd=new CustomDialogClass(HardAddition.this);
            cdd.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            cdd.show();  
        }
    };

    //Calling Method to generate Numbers Randomly

    getRandom();

    // Starting Timer

    timer1.start();



    options.setOnCheckedChangeListener(new OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(RadioGroup arg0, int arg1) {
            // TODO Auto-generated method stub

            check_answer();
        }
    });

    // Submit Button to check the answer


    Submit=(Button)findViewById(R.id.Hrd_AddOK_Btn_ID);;

    Submit.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub


            MediaPlayer mp=MediaPlayer.create(HardAddition.this, R.raw.tick);
            mp.start();
            timer1.cancel();
            Submit.setVisibility(View.INVISIBLE);

            //Calling Method which will check the answer defined below

            isCorrect();

        }
    });


}


//Method to Generate Numbers Randomly


public void getRandom()
{
     int FirstNum= rand.nextInt((1000-500)+1)+500;

     Num1.setText(String.valueOf(FirstNum));

     int SecondNum= rand.nextInt((5000-1000)+1)+1000;

     Num2.setText(String.valueOf(SecondNum));

     int x= Integer.parseInt(Num1.getText().toString());
     int y= Integer.parseInt(Num2.getText().toString());

     Result=x+y;

     answer2.setText(String.valueOf(Result));





   int option_value1;

     do{

        option_value1 =rand.nextInt((2000-500)+1)+500;

     }
     while(option_value1==Result);

     answer1.setText(String.valueOf(option_value1));

    int option_value2;

     do{

        option_value2 =rand.nextInt((3000-1500)+1)+1500;

     }
     while(option_value2==Result);

     answer3.setText(String.valueOf(option_value2));



     int a=Integer.parseInt(answer1.getText().toString());
     int b=Integer.parseInt(answer2.getText().toString());
     int c=Integer.parseInt(answer3.getText().toString());


     Integer[] options = {a, b , c  };
     Collections.shuffle(Arrays.asList(options));

     // assign the value choice

     a = options[0];
     b = options[1];
     c = options[2];



     answer1.setText(String.valueOf(a));
     answer2.setText(String.valueOf(b));
     answer3.setText(String.valueOf(c));


    }

// Method to check the answer

 public void isCorrect()
 {


    if(answer1.isChecked()==false && answer2.isChecked()==false && answer3.isChecked()==false)
       {

         Toast.makeText(getApplicationContext(), "Please Select One Option", Toast.LENGTH_SHORT).show();
         Submit.setVisibility(View.VISIBLE);    
       }

    else if(answer1.isChecked())
    {
        Image.setVisibility(View.VISIBLE);
        z=Integer.parseInt(answer1.getText().toString());
        if(z==Result)
        {
            //Displaying Image 

            Image.setBackgroundResource(R.drawable.a);

            //Playing Sound

            mp=MediaPlayer.create(HardAddition.this, R.raw.wow);
            mp.start();

            //Increamenting Score

            increamentscore();

            //Generating New Question

            final Handler handler=new Handler();

                    handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                     Questions();
                     answer1.setChecked(false);
                     answer2.setChecked(false);
                     answer3.setChecked(false);
                     mp.stop();
                     mp.release();

                }
            }, 3500);

        }
        else{

            //Displaying Image 

            Image.setBackgroundResource(R.drawable.r);

            //Playing Sound

            mp=MediaPlayer.create(HardAddition.this, R.raw.okay);
            mp.start();

            final Handler handler=new Handler();

                    handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                     Questions();        
                     answer1.setChecked(false);
                     answer2.setChecked(false);
                     answer3.setChecked(false);
                     mp.stop();
                     mp.release();

                }
            }, 3500);


        }

    }

    else if(answer2.isChecked())
    {   Image.setVisibility(View.VISIBLE);
        z=Integer.parseInt(answer2.getText().toString());
        if(z==Result)
        {

            //Displaying Image              

            Image.setBackgroundResource(R.drawable.b);

            //Playing Sound

            mp=MediaPlayer.create(HardAddition.this, R.raw.wow);
            mp.start();

            Increamenting Score

            increamentscore();

            final Handler handler=new Handler();

                    handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                     Questions();
                     answer1.setChecked(false);
                     answer2.setChecked(false);
                     answer3.setChecked(false);
                     mp.stop();
                     mp.release();

                }
            }, 3500);

        }
        else{
            //Displaying Image

            Image.setBackgroundResource(R.drawable.r);

            //Playing Sound

            mp=MediaPlayer.create(HardAddition.this, R.raw.okay);
            mp.start();

            final Handler handler=new Handler();

                    handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                     Questions();
                     answer1.setChecked(false);
                     answer2.setChecked(false);
                     answer3.setChecked(false);
                     mp.stop();
                     mp.release();

                }
            }, 3500);

        }
    }

    else if(answer3.isChecked())
    {  
        Image.setVisibility(View.VISIBLE);
        z=Integer.parseInt(answer3.getText().toString());
        if(z==Result)
        {

            //Displaying Image

            Image.setBackgroundResource(R.drawable.a);

            // Playing Sound

            mp=MediaPlayer.create(HardAddition.this, R.raw.wow);
            mp.start();

            increamentscore();

            final Handler handler=new Handler();

                handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                     Questions();
                     answer1.setChecked(false);
                     answer2.setChecked(false);
                     answer3.setChecked(false);
                     mp.stop();
                     mp.release();

                }
            }, 3500);


        }
        else{

            //Displaying Image

            Image.setBackgroundResource(R.drawable.r);

            //Playing Sound

            mp=MediaPlayer.create(HardAddition.this, R.raw.okay);
            mp.start();

            final Handler handler=new Handler();

                    handler.postDelayed(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub

                     Questions();    
                     answer1.setChecked(false);
                     answer2.setChecked(false);
                     answer3.setChecked(false);
                     mp.stop();
                     mp.release();

                }
            }, 3500);

        }

}
}

    public void Counter_Dialog() {

    final AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Time is Up !!!")
            .setMessage(
                    "Your Time is Up, Press Next to Move to the Next Question")
            // .setIcon(android.R.drawable.ic_dialog_alert)
            .setPositiveButton("Next",
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog,
                                int which) {

                            mp=MediaPlayer.create(getApplicationContext(), R.raw.tick);
                            mp.start();
                            Questions();
                            //timer1.start();
                            answer1.setChecked(false);
                            answer2.setChecked(false);
                            answer3.setChecked(false);

                        }
                    })
            // .setNegativeButton("No", null)
            .show();

}


// Increamenting Score

public int increamentscore() {

    if(Score<99)
    {
        Score = Score + 1;
        Answer.setText(String.valueOf(Score));

    }

    else{

         Score=0;
    }


    return Score;
}




// Generating New Question

public void Questions() {

                    Image.setVisibility(View.GONE);
            getRandom();
            timer1.start();
            options.clearCheck();
            check_answer1.setText(String.valueOf(""));
            Submit.setVisibility(View.VISIBLE);

}


 // Checking the value of Checked Answer by the User

public void check_answer()
{   int y;

    switch(options.getCheckedRadioButtonId())
    {

case R.id.Hard_Add_answer1:
    y=Integer.parseInt(answer1.getText().toString());
    check_answer1.setText(String.valueOf(y));
    break;

case R.id.Hard_Add_Answer2:
    y=Integer.parseInt(answer2.getText().toString());
    check_answer1.setText(String.valueOf(y));
break;

case R.id.Hard_Add_Answer3:
    y=Integer.parseInt(answer3.getText().toString());
    check_answer1.setText(String.valueOf(y));
    break;

    }

}


// Dialog which will display on When Time is UP

public class CustomDialogClass extends Dialog implementsandroid.view.View.OnClickListener
{

public Activity c;
public Dialog d;


public CustomDialogClass(Activity a) {
super(a);
// TODO Auto-generated constructor stub
this.c = a;
}

@Override
 protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog_box );
Next = (Button) findViewById(R.id.dialog_Next);
Next.setOnClickListener(this);

}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.dialog_Next:
 mp=MediaPlayer.create(getApplicationContext(), R.raw.tick);
 mp.start();
 Questions();
  break;
 default:
  break;
 }
 dismiss();
}
} 




@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.hard__addition, menu);
    return true;
}

}

解决方案

error MediaPlayer (-19, 0) because from the same reference you can call only 18 times.

You need to release the MediaPlayer when completion;

MediaPlayer mp = new MediaPlayer();

 mp.prepare();
 mp.start();

mp.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.release();

        }
    });

这篇关于Android的MediaPlayer的完成而不释放的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆