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

Java 如何在关闭应用程序时停止音乐,java,android,Java,Android,我的申请有问题。 它是一个媒体录制播放器。 播放器正在工作,但问题是,当我播放歌曲或录音机时 我关闭应用程序(退出),音乐不会停止播放。 你能帮我解决我的问题吗? 多谢各位 @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_

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

    @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",""));
        }
    }


}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,
WindowManager.LayoutParams.FLAG(全屏);
setContentView(R.layout.activity\u播放器);
albumart=(ImageView)findViewById(R.id.albumart);
name=(TextView)findViewById(R.id.songName);
艺术家=(TextView)findViewById(R.id.artistName);
play=(图像按钮)findViewById(R.id.playButton);
prev=(ImageButton)findViewById(R.id.previousButton);
下一步=(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=新歌曲();
if(fs.getfetchstatus()!=true){
mySongs=fs.findSongs(Environment.getExternalStorageDirectory());
}
否则{
mySongs=fs.getsonglist();
mPlayer.release();
}
Intent=getIntent();
位置=意图。getIntExtra(“位置”,0);
path=mySongs.get(position.toString();
u=Uri.parse(路径);
设置数据(路径、位置);
mPlayer=MediaPlayer.create(getApplicationContext(),u);
mPlayer.start();
mPlayer.setLooping(true);
play.setImageResource(R.drawable.icone);
sb.setMax(mPlayer.getDuration());
su=新seekUpdater(真);
su.start();
sb.setonseekbarchaneglistener(新SeekBar.onseekbarchaneglistener(){
@凌驾
public void onProgressChanged(SeekBar SeekBar、int i、boolean b){
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
}
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
mPlayer.stop();
mPlayer.release();
}
});
play.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(mPlayer.isPlaying()){
mPlayer.pause();
play.setImageResource(R.drawable.icone);
}
否则{
mPlayer.start();
play.setImageResource(R.drawable.icone);
}
}
});
next.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(su!=null){
su.endthread();
su.interrupt();
su=null;
}
mPlayer.stop();
mPlayer.release();
位置=(位置+1)%mySongs.size();
path=mySongs.get(position.toString();
设置数据(路径、位置);
u=Uri.parse(路径);
mPlayer=MediaPlayer.create(getApplicationContext(),u);
mPlayer.start();
mPlayer.setLooping(true);
play.setImageResource(R.drawable.icone);
sb.setMax(mPlayer.getDuration());
sb.setProgress(mPlayer.getCurrentPosition());
su=新seekUpdater(真);
su.start();
}
});
prev.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
if(su!=null){
su.endthread();
su.interrupt();
su=null;
}
mPlayer.stop();
mPlayer.release();

position=(position-1不知道你在做什么,但这应该行得通

将此添加到您的
onPause

mPlayer.stop();


每次您的活动失去焦点时,都会调用onPause。

欢迎使用堆栈溢出!我认为此代码的95%与您的问题无关。请创建一个演示您的问题的示例。很抱歉,我现在开始学习,因为它是活动生命周期的一部分。您必须重写它。编码愉快
@Override
public void onPause() {
    super.onPause();
    mPlayer.stop();        
}