在Android中,当我播放音频并进行其他活动时,返回后音频不会停止 [英] In Android, When I Play Audio and go to other activity, audio doesn't stop after coming back

查看:90
本文介绍了在Android中,当我播放音频并进行其他活动时,返回后音频不会停止的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是Android环境中的新手,我的问题是当我播放音频文件并转到其他活动或按后退"按钮,然后再次在我播放音频的地方打开我的应用程序时,按Stop时并没有停止按钮.当我按下主页按钮并尝试停止时它起作用.谁能建议我该怎么做 这是我的活动代码

I'm new in Android environment, my problem is while I Play audio file and go to other activity or press back button, and again open my application where I've played audio, it doesn't stop while i press stop button. it works when i press home button and try to stop. can anyone suggest me what to Here's the code of my activity

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();
        }
    }
}

推荐答案

对于快速解决方案,您可以创建如下方法:

For a quick solution you can create a method like this:

void resetMediaPlayer() {
   if(mediaPlayer!=null) {
       try {
             mediaPlayer.reset();
       }
       catch(Exception e) {
           e.printStackTrace();
       }
   }
}

然后在activity中覆盖onBackPressed方法并调用resetMediaPlayer:

Then override the onBackPressed method in your activity and call resetMediaPlayer :

@Override
public void onBackPressed(){
    super.onBackPressed();
  resetMediaPlayer()
}

或在需要停止media player的任何地方调用它.

Or call it anywhere you need to stop your media player.

这不是停止媒体播放器的好方法.为了获得更好的实现,您必须像这样更改resetMediaPlayer方法:

This is not a good way to stop media player though. for a better implementation you have to change your resetMediaPlayer method like this:

void resetMediaPlayer() {
    if(mediaPlayer!=null) {
        try {
            mediaPlayer.reset();
            mediaPlayer.release();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
}

并且每当要启动Media Player时,都必须创建Media Player的新实例,例如:

And whenever you want to start Media Player you have to create a new instance of Media Player for example:

void startMediaPlayer(int selectedSong) {
    try {
        mediaPlayer = MediaPlayer.create(activity, selectedSong);
        mediaPlayer.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

并在activityonDestroy方法中调用resetMediaPlayer:

@Override
protected void onDestroy() {
    super.onDestroy();
    resetPlayView();
}

这篇关于在Android中,当我播放音频并进行其他活动时,返回后音频不会停止的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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