【问题标题】:My android App stop playing sound on button tap after some time一段时间后,我的 android 应用程序在按钮点击时停止播放声音
【发布时间】:2018-07-10 02:40:04
【问题描述】:

你好,我刚刚创建了一个基本的安卓应用程序,它可以在点击按钮时播放不同的音乐.. 该应用程序在最初的几秒钟内运行良好,但是当我继续点击和点击时,有时它会停止播放音乐并崩溃... 我无法弄清楚问题是什么..请帮我让它工作.. 谢谢。 这是我的代码:-

 public class MainActivity extends AppCompatActivity {

MediaPlayer mediaPlayer;

public void PlayMusic(View view)
{
int ID = view.getId();
String NameID = view.getResources().getResourceEntryName(ID);
int sound= getResources().getIdentifier(NameID,"raw","com.example.pickachu.mypatatap");
mediaPlayer = MediaPlayer.create(this,sound);
mediaPlayer.start();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

【问题讨论】:

  • 共享错误堆栈跟踪。
  • 在前台服务中播放 MediaPlayer。谷歌安卓服务。
  • 其实,我是初学者,你能解释一下你的观点吗..我该怎么做。

标签: java android android-studio android-activity


【解决方案1】:

多次点击后声音未播放,因为您必须得到IllegalStateException,因为您不是releasing the Mediaplayer object,并且Mediaplayer Lifecycles在您多次点击时没有得到妥善管理。

你可以使用setOnCompletionListener(MediaPlayer.OnCompletionListener listener)在完成声音后释放mediaPlayer为:

mediaPlayer = MediaPlayer.create(this,sound);
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.reset();
                mp.release();
                mediaplayer = null;
            }
        });
mediaPlayer.start();

【讨论】:

  • 谢谢兄弟,它对我有用......但我有一个疑问,为什么垃圾收集器不在这里释放对象内存......
【解决方案2】:

传递 uri 而不是字符串

mediaPlayer= MediaPlayer.create(this, Uri.parse(Environment.getExternalStorageDirectory().getPath()+ "/Music/music.mp3"));
mediaPlayer.setLooping(true);
        mpintro.start();

【讨论】:

  • 我最近注意到它实际上在第 14 次点击按钮后停止播放声音。
  • 好的,你能添加完整的点击按钮和播放声音的代码
最近更新 更多