You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:27:05