Android的MediaPlayer的完成而不释放 [英] Android MediaPlayer finalized without being released
问题描述
我创建一个测验应用程序。经过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ÿ; 开关(options.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屋!