Android Studio用Java实现倒计时剩余10秒时通过SoundPool播放音乐
代码修改说明
- 你现有代码里有个冗余的
SoundPool初始化逻辑,用Builder创建完实例之后又用已废弃的构造方法覆盖了原有实例,先删掉这行冗余代码 - 新增一个播放状态标记,避免倒计时每秒触发时重复播放音频
- 在
onTick回调里判断剩余时长,小于等于10秒时触发音频播放 - 补充Activity销毁时的SoundPool资源释放逻辑,避免内存泄漏
public class BeginAfter extends AppCompatActivity { TextView textView; private SoundPool soundPool; private int tensec; // 新增音频播放状态标记,避免重复播放 private boolean isSoundPlayed = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_begin_after); AudioAttributes audioAttributes = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build(); soundPool = new SoundPool.Builder() .setMaxStreams(1) .setAudioAttributes(audioAttributes) .build(); // 已删除原来冗余的废弃构造方法初始化代码 tensec = soundPool.load(this, R.raw.timer_run, 1); textView = findViewById(R.id.timer); long duration = TimeUnit.MINUTES.toMillis(1); new CountDownTimer(duration, 1000) { @Override public void onTick(long l) { // 判断剩余时长小于等于10秒且音频未播放时触发播放 if (l <= 10000 && !isSoundPlayed) { soundPool.play(tensec, 1, 1, 1, 0, 1); isSoundPlayed = true; } String sDuration = String.format(Locale.ENGLISH, "%01d", TimeUnit.MILLISECONDS.toSeconds(l) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(l))); textView.setText(sDuration); } @Override public void onFinish() { Intent intent = new Intent(BeginAfter.this, Begindup.class); startActivity(intent); finish(); } }.start(); } @Override protected void onDestroy() { super.onDestroy(); // 释放SoundPool资源 if (soundPool != null) { soundPool.release(); soundPool = null; } } }
内容的提问来源于stack exchange,提问作者user16240688
相关产品推荐
相关产品推荐

