【问题标题】:Mediaplayer stops in android after 30 clicks点击 30 次后,Mediaplayer 在 android 中停止
【发布时间】:2016-08-27 19:36:40
【问题描述】:

我看过其他帖子,但我无法弄清楚问题。

所以我正在设计一个计算器,所有数字都有一个 onclick 方法,所有运算符都有不同的 .我有一个方法 playSound() ,其中代码是:

public void playSound(){

         MediaPlayer mp= MediaPlayer.create(this, R.raw.btn);

        setVolumeControlStream(AudioManager.STREAM_MUSIC);

        if(mp.isPlaying())
        {
            mp.stop();
            mp.reset();
        }
            mp.start();


    }

我已经尝试发布到。谁能告诉我写这个的有效方法。 我在 onclick 方法中调用此方法。但大约 30 次点击后它停止了。我也尝试过创建 MediaPlayer 全局,但它仍然停止。我读过媒体播放器实际上很昂贵,所以我们可以使用声音池。但即使是 soundpool 也已被弃用。有什么帮助吗?

【问题讨论】:

  • 你是在尝试不同的声音还是总是一样的 R.raw.btn ?
  • 我总是一样。我知道我不需要每次都分配它,但我只是在四处寻找解决方案

标签: android android-mediaplayer android-sound


【解决方案1】:

实现 onComplition() 监听器,在那个监听器中你可以调用 release 方法

您创建了多个媒体播放器实例,但没有发布媒体播放器实例,这就是问题出现的原因 释放调用后,您的问题将得到解决

【讨论】:

  • 在我的情况下,当每个按钮被按下时,它都会调用这个方法。所以从技术上讲,在计算器中,只需按一下按钮,声音就会一直播放,那么我应该什么时候释放媒体播放器?
  • 可以只声明一次 mediaPlayer 变量 global 和 creare obj 吗?
  • 我尝试的是在全局范围内定义一个媒体播放器 mp,在 oncreate 期间我做了以下操作: mp=MediaPlayer.create(this,R.raw.btn);并在点击 10 次后停止声音
  • Ok实现onCompletion监听并在oncompletion方法中写代码mp.release,移除全局变量
  • 我检查工作正常,在你身边的问题仍然存在
【解决方案2】:

将 MediaPlayer 初始化为类属性:

MediaPlayer media = MediaPlayer.create(this,R.raw. btn);

在 playSound() 方法中:

public void playSound(){
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        mp.reset();
        mp.start();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2020-02-09
    相关资源
    最近更新 更多