lantianyiming 2013-08-09 09:11 采纳率: 0%
浏览 1543

在activity开始时播放声音

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View view = findViewById(R.id.textView1);
view.setOnTouchListener(this);

this.setVolumeControlStream(AudioManager.STREAM_MUSIC);

soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
    @Override
    public void onLoadComplete(SoundPool soundPool, int sampleId,
            int status) {
        loaded = true;
    }
});
soundID = soundPool.load(this, R.raw.dog_bark, 1);

 }
;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {

    AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
    float actualVolume = (float) audioManager
            .getStreamVolume(AudioManager.STREAM_MUSIC);
    float maxVolume = (float) audioManager
            .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = actualVolume / maxVolume;

    if (loaded) {
        soundPool.play(soundID, volume, volume, 1, 0, 1f);
    }
}
return false;

}
}

代码实现的是在点击事件后声音才会播放。我想要在activity开始后自动播放。然后在播放一遍后,再次点击事件时再播放,谢谢

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-12 09:45
    关注

    可以在 onCreate() 方法中调用 soundPool.play() 来在 Activity 启动后自动播放声音。你可以在 onLoadComplete() 中判断声音是否加载完毕,如果加载完毕,立刻调用 play() 方法播放声音。


    为了确保只播放一次,你可以在 onTouch() 方法中使用一个变量来记录是否已经播放过声音。
    示例代码如下:

    private boolean isSoundPlayed = false;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        View view = findViewById(R.id.textView1);
        view.setOnTouchListener(this);
        this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
        soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
        soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
            @Override
            public void onLoadComplete(SoundPool soundPool, int sampleId,
                    int status) {
                if (!isSoundPlayed) {
                    soundPool.play(soundID, volume, volume, 1, 0, 1f);
                    isSoundPlayed = true;
                }
            }
        });
        soundID = soundPool.load(this, R.raw.dog_bark, 1);
    }
    
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
            float actualVolume = (float) audioManager
                    .getStreamVolume(AudioManager.STREAM_MUSIC);
            float maxVolume = (float) audioManager
                    .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
            float volume = actualVolume / maxVolume;
            if (isSoundPlayed) {
                soundPool.play(soundID, volume, volume, 1, 0, 1f);
            }
        }
        return false;
    }
    

    这是一个示例代码,帮助你理解如何在 activity 启动后自动播放声音,并在第二次点击后再次播放。

    评论

报告相同问题?

悬赏问题

  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿