在Android中,当我播放音频并转到其他活动时,音频回来后不会停止
Posted
技术标签:
【中文标题】在Android中,当我播放音频并转到其他活动时,音频回来后不会停止【英文标题】:In Android, When I Play Audio and go to other activity, audio doesn't stop after coming back 【发布时间】:2017-06-07 15:25:45 【问题描述】:我是 android 环境中的新手,我的问题是当我播放音频文件并转到其他活动或按返回按钮时,再次打开我播放音频的应用程序,当我按停止时它不会停止按钮。当我按下主页按钮并尝试停止时它可以工作。谁能建议我做什么 这是我的活动代码
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();
【问题讨论】:
你应该把你的活动代码放在这里。 【参考方案1】:对于快速解决方案,您可以创建如下方法:
void resetMediaPlayer()
if(mediaPlayer!=null)
try
mediaPlayer.reset();
catch(Exception e)
e.printStackTrace();
然后覆盖activity
中的onBackPressed
方法并调用resetMediaPlayer
:
@Override
public void onBackPressed()
super.onBackPressed();
resetMediaPlayer()
或者在你需要停止media player
的任何地方调用它。
虽然这不是停止媒体播放器的好方法。为了更好地实现,您必须像这样更改您的 resetMediaPlayer
方法:
void resetMediaPlayer()
if(mediaPlayer!=null)
try
mediaPlayer.reset();
mediaPlayer.release();
catch(Exception e)
e.printStackTrace();
每当您想启动 Media Player
时,您都必须创建一个新的媒体播放器实例,例如:
void startMediaPlayer(int selectedSong)
try
mediaPlayer = MediaPlayer.create(activity, selectedSong);
mediaPlayer.start();
catch (Exception e)
e.printStackTrace();
并且还在你的activity
的onDestroy
方法中调用resetMediaPlayer
:
@Override
protected void onDestroy()
super.onDestroy();
resetPlayView();
【讨论】:
最好也调用resetMediaPlayer onDestroy 很高兴为您提供帮助,如果解决了您的问题,请考虑接受。以上是关于在Android中,当我播放音频并转到其他活动时,音频回来后不会停止的主要内容,如果未能解决你的问题,请参考以下文章
当用户切换到 Android Studio Kotlin 中的其他页面时,如何停止播放音乐?
当我单击 Eclipse 中的按钮时,使用 tabHost 并转到特定选项卡