gpt4 book ai didi

android - 按下电源按钮时异步任务音乐不会停止

转载 作者:搜寻专家 更新时间:2023-11-01 09:05:23 25 4
gpt4 key购买 nike

在我的应用程序中,背景音乐由异步任务控制。当按下主页按钮时,音乐会关闭。当按下电源按钮时,它会继续播放。我还意识到,如果我按下电源按钮然后恢复它,它会同时开始复制歌曲。

private single s;
private BackgroundSound mBackgroundSound = new BackgroundSound();


protected void onPause(){
super.onPause();
Log.d("mSTATE","PAUSE");
s.onPause();
mBackgroundSound.cancel(true);
}

public void onBackPressed() {
super.onBackPressed();
return;
}

protected void onDestroy(){
super.onDestroy();
Log.d("mState","DESTROY");
}

public void onWindowFocusChanged(boolean change){
super.onWindowFocusChanged(change);

}

@Override
protected void onResume(){
super.onResume();
mBackgroundSound = new BackgroundSound();
mBackgroundSound.execute(null);
Log.d("mSTATE","RESUME");
s.onResume();

}

@Override
protected void onStop(){
super.onStop();
Log.d("mSTATE","STOP");
s.freeMemory();
mBackgroundSound.end();


}

@Override
protected void onRestart(){
super.onRestart();
Log.d("mSTATE","RESTART");
}

@Override
protected void onStart(){
super.onStart();
Log.d("mSTATE","STARTER");
}


public class BackgroundSound extends AsyncTask<Void, Void, Void> {
private MediaPlayer player;
protected void onPreExecute() {
player = MediaPlayer.create(SingleActivity.this, R.raw.song);
}
@Override
protected Void doInBackground(Void... params) {

player.setLooping(true);
AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);
int maxRingerVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
double proportion = currentVolume/(double)maxRingerVolume;
int maxMusicVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int volume = (int)(proportion * maxMusicVolume);
player.setVolume(volume,volume);
player.setLooping(true);
player.start();
return null;
}

public void end(){
player.stop();
player.release();
}

}

最佳答案

据我所知,当按下电源按钮时,只有 onpause 被调用而没有 onstop 被调用,因为没有其他 Activity 进入前台,只有系统窗口出现在上面。因此,您的结束通话未被调用。

更好的方法是覆盖 Asynctask.onCancelled 并在 OnPause 而不是 onstop 中调用 Asynctask.cancel 方法

关于android - 按下电源按钮时异步任务音乐不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com