在Android中,当我播放音频并转到其他活动时,音频不会';回来后不要停下来
我是Android环境中的新手,我的问题是当我播放音频文件并转到其他活动或按下后退按钮,然后再次打开我播放音频的应用程序时,当我按下停止按钮时,它不会停止。当我按下home(主页)按钮并尝试停止时,它会工作。有人能建议我做什么吗 这是我活动的代码在Android中,当我播放音频并转到其他活动时,音频不会';回来后不要停下来,android,audio,Android,Audio,我是Android环境中的新手,我的问题是当我播放音频文件并转到其他活动或按下后退按钮,然后再次打开我播放音频的应用程序时,当我按下停止按钮时,它不会停止。当我按下home(主页)按钮并尝试停止时,它会工作。有人能建议我做什么吗 这是我活动的代码 package com.example.mudassar.myaudioapp; import android.content.Intent; import android.os.Environment; import android.os.Netw
package com.example.mudassar.myaudioapp;
import android.content.Intent;
import android.os.Environment;
import android.os.NetworkOnMainThreadException;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//MediaPlayer mp;
Button playBtn, pauseBtn, stopBtn;
SeekBar sb;
Handler han = new Handler();
MediaPlayer mp;// = MediaPlayer.create(MainActivity.this, R.raw.firefly);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
playBtn= (Button)findViewById(R.id.playBtn);
pauseBtn= (Button)findViewById(R.id.pauseBtn);
stopBtn=(Button) findViewById(R.id.stopBtn);
try{
//you can change the path, here path is external directory(e.g. sdcard) /Music/maine.mp3
//mp.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/raw/.mp3");
mp = MediaPlayer.create(MainActivity.this, R.raw.firefly);
mp.prepare();
}catch(Exception e){e.printStackTrace();}
sb = (SeekBar)findViewById(R.id.seekBar);
sb.setMax(mp.getDuration());
SeekUpdation();
playBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SeekUpdation();
//if (mp == null)
if(mp.isPlaying() == false)
mp = MediaPlayer.create(MainActivity.this, R.raw.firefly);
mp.start();
sb.setMax(mp.getDuration());
sb.setProgress(mp.getCurrentPosition());
}
});
pauseBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
if(mp.isPlaying() == false){
mp.start();
sb.setProgress(mp.getCurrentPosition());
Toast.makeText(MainActivity.this, "Playing", Toast.LENGTH_SHORT).show();
}else if(mp.isPlaying() == true){
mp.pause();
sb.setProgress(mp.getCurrentPosition());
Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show();
}
}
});
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//if (mp != null) {
if(mp.isPlaying() == true){
mp.stop();
sb.setProgress(mp.getDuration());
//mp = null;
}
Toast.makeText(MainActivity.this, "Stoped", Toast.LENGTH_SHORT).show();
}
});
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener(){
@Override
public void onStopTrackingTouch(SeekBar seekBar){
//if(mp!=null){
if(!mp.isPlaying()){
mp.seekTo(seekBar.getProgress());
mp.start();
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar){
//if(mp!=null)
if(mp.isPlaying()){
mp.pause();
}else
mp.start();
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser){
}
});
Button btn = (Button)findViewById(R.id.secondActivityButton);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, second.class));
}
});
}
public void MyOwnClick(View v){
startActivity(new Intent(MainActivity.this, second.class));
}
public Runnable run = new Runnable() {
@Override
public void run() {
SeekUpdation();
}
};
public void SeekUpdation() {
//if(mp!=null)
if(mp.isPlaying() == true)
{
sb.setProgress(mp.getCurrentPosition());
han.postDelayed(run, 1000);
//Toast.makeText(MainActivity.this, "is Playing", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, "Seek", Toast.LENGTH_SHORT).show();
}
}
}
对于快速解决方案,您可以创建如下方法:
void resetMediaPlayer() {
if(mediaPlayer!=null) {
try {
mediaPlayer.reset();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
void resetMediaPlayer() {
if(mediaPlayer!=null) {
try {
mediaPlayer.reset();
mediaPlayer.release();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
然后覆盖活动中的onBackPressed
方法,并调用resetMediaPlayer
:
@Override
public void onBackPressed(){
super.onBackPressed();
resetMediaPlayer()
}
或者在需要停止媒体播放器的任何地方调用它
但这并不是阻止媒体播放器的好方法。为了更好地实现,您必须更改resetMediaPlayer
方法,如下所示:
void resetMediaPlayer() {
if(mediaPlayer!=null) {
try {
mediaPlayer.reset();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
void resetMediaPlayer() {
if(mediaPlayer!=null) {
try {
mediaPlayer.reset();
mediaPlayer.release();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
无论何时启动Media Player
,都必须创建Media Player的新实例,例如:
void startMediaPlayer(int selectedSong) {
try {
mediaPlayer = MediaPlayer.create(activity, selectedSong);
mediaPlayer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
并在活动的方法中调用重置MediaPlayer
:
@Override
protected void onDestroy() {
super.onDestroy();
resetPlayView();
}
最好是调用RealMeItApple来破坏AlsOgLad,如果它解决了你的问题,请考虑接受它。你应该把你的活动代码放在这里。