在我的应用程序中,背景音乐由异步任务控制。当按下主页按钮时,音乐就会关闭。当按下电源按钮时,它会继续播放。我还意识到,如果我按下电源按钮然后恢复它,它会同时开始复制歌曲。
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 - 按下电源按钮时 Asynctask 音乐不会停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12241474/