java - 如何在关闭应用程序时停止音乐

标签 java android

我的申请有问题。 它是一个媒体记录播放器。 播放器正在工作,但问题是,当我播放歌曲或录音机时 我关闭应用程序(退出)并且音乐没有停止播放。 你能帮我解决我的问题吗? 谢谢。

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_player);

        albumart=(ImageView)findViewById(R.id.albumArt);
        name=(TextView)findViewById(R.id.songName);
        artist=(TextView)findViewById(R.id.artistName);
        play=(ImageButton)findViewById(R.id.playButton);
        prev=(ImageButton)findViewById(R.id.previousButton);
        next=(ImageButton)findViewById(R.id.nextButton);
        playlist=(ImageButton)findViewById(R.id.playlistButton);
        sb=(SeekBar)findViewById(R.id.seekBar);

        if(mPlayer!=null){
            if(su!=null){
                su.endthread();
                su.interrupt();
                su=null;
            }
            mPlayer.stop();
            mPlayer.release();
        }

        fs=new FetchSongs();
        if(fs.getfetchstatus()!=true){
            mySongs = fs.findSongs(Environment.getExternalStorageDirectory());
        }
        else{
            mySongs=fs.getsonglist();
            mPlayer.release();
        }

        Intent intent=getIntent();
        position=intent.getIntExtra("pos",0);
        path=mySongs.get(position).toString();
        u=Uri.parse(path);

        setsongdata(path,position);
        mPlayer=MediaPlayer.create(getApplicationContext(),u);
        mPlayer.start();
        mPlayer.setLooping(true);
        play.setImageResource(R.drawable.icone);

        sb.setMax(mPlayer.getDuration());
        su=new seekUpdater(true);
        su.start();

        sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {

            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch (SeekBar seekBar) {
                mPlayer.stop();
                mPlayer.release();
            }
        });

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(mPlayer.isPlaying()){
                    mPlayer.pause();
                    play.setImageResource(R.drawable.icone);
                }
                else {
                    mPlayer.start();
                    play.setImageResource(R.drawable.icone);

                }
            }
        });

        next.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(su!=null){
                    su.endthread();
                    su.interrupt();
                    su=null;
                }
                mPlayer.stop();
                mPlayer.release();
                position=(position+1)%mySongs.size();
                path=mySongs.get(position).toString();
                setsongdata(path,position);
                u=Uri.parse(path);
                mPlayer=MediaPlayer.create(getApplicationContext(),u);
                mPlayer.start();
                mPlayer.setLooping(true);
                play.setImageResource(R.drawable.icone);
                sb.setMax(mPlayer.getDuration());
                sb.setProgress(mPlayer.getCurrentPosition());
                su=new seekUpdater(true);
                su.start();
            }
        });

        prev.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(su!=null){
                    su.endthread();
                    su.interrupt();
                    su=null;
                }
                mPlayer.stop();
                mPlayer.release();
                position=(position-1<0)? mySongs.size()-1:position-1;
                path=mySongs.get(position).toString();
                setsongdata(path,position);
                u=Uri.parse(path);
                mPlayer=MediaPlayer.create(getApplicationContext(),u);
                mPlayer.start();
                mPlayer.setLooping(true);
                play.setImageResource(R.drawable.icone);
                sb.setMax(mPlayer.getDuration());
                sb.setProgress(mPlayer.getCurrentPosition());
                su=new seekUpdater(true);
                su.start();
            }
        });
        playlist.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(getApplicationContext(),MainActivity.class));
            }
        });
    }

    class seekUpdater extends Thread{

        private boolean running;

        seekUpdater(boolean status){
            running=status;
        }

        public void endthread(){
            running=false;
        }

        @Override
        public void run() {
            try {
                while (running==true) {
                    int dur = mPlayer.getDuration();
                    int cur = mPlayer.getCurrentPosition();
                    while (cur < dur) {
                            sleep(500);
                            cur = mPlayer.getCurrentPosition();
                            sb.setProgress(cur);
                    }
                }
            }
            catch (InterruptedException e){
                e.printStackTrace();

                running=false;

            }
            //super.run();
        }
    }

    public void setsongdata(String songpath, int pos){
        mmr=new MediaMetadataRetriever();
        mmr.setDataSource(songpath);
        try {
            songName=mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
            art = mmr.getEmbeddedPicture();
            songArt = BitmapFactory.decodeByteArray(art, 0, art.length);
            artistName = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
            artist.setText(artistName);
            name.setText(songName);
            albumart.setImageBitmap(songArt);
        }
        catch (Exception e){
            albumart.setImageResource(R.drawable.albumart);
            artist.setText("Unknown Artist");
            name.setText(mySongs.get(pos).getName().toString().replace(".3gp",""));
        }
    }


}

最佳答案

不知道你在做什么,但这应该行得通

将此添加到您的 onPause

mPlayer.stop();

喜欢

@Override
public void onPause() {
    super.onPause();
    mPlayer.stop();        
}

每次您的 Activity 失去焦点时都会调用 onPause。

关于java - 如何在关闭应用程序时停止音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43551909/

相关文章:

java - SherlockFragment 内未定义的 onKeyDown

java - Java中如何将一个字符串中的某个单词复制到另一个字符串

java - Google App Engine Java 错误

java - Java 中可以将类型参数转换为类吗?

android - 如何在 React Native 0.60-RC 中生成签名的 apk

java - 如何在焦点时放大 EditText?

java - 禁用客户健康检查 - Hystrix

android - java.lang.SecurityException : MODE_WORLD_READABLE no longer supported with OPEN_READONLY 错误

java - 从普通类方法开始新 Activity

java - 如何更改此 fragment