MediaPlayer的停止播放声音 - 安卓 [英] MediaPlayer stops playing the sounds - Android

查看:168
本文介绍了MediaPlayer的停止播放声音 - 安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是一个简单的钢琴应用程序,它的工作原理,但有一个问题。经过约20点击(有时正是28点击)即使我点击的按钮它不播放任何声音。该应用程序犯规崩溃或不提醒我什么。这只是什么。没有声音。你有什么想法?

 包com.example.playaudio;

进口android.app.Activity;
进口android.media.AudioManager;
进口android.media.MediaPlayer;
进口android.os.Bundle;
进口android.view.Menu;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.widget.Button;


    公共类MainActivity扩展活动实现OnClickListener {
        私人MediaPlayer的熔点;
        私人MediaPlayer的MP2;
        私人MediaPlayer的MP3;
        私人MediaPlayer的MP4;
        私人MediaPlayer的MP5;
        私人MediaPlayer的MP6;
        私人MediaPlayer的MP7;
        @覆盖
        保护无效的onCreate(包savedInstanceState){
            super.onCreate(savedInstanceState);
            的setContentView(R.layout.activity_main);
            setVolumeControlStream(AudioManager.STREAM_MUSIC);
            按钮按钮1 =(按钮)findViewById(R.id.button_1);
            按钮按钮2 =(按钮)findViewById(R.id.button_2);
            按钮按钮3 =(按钮)findViewById(R.id.button_3);
            按钮将Button4 =(按钮)findViewById(R.id.button_4);
            按钮button5 =(按钮)findViewById(R.id.button_5);
            按钮button6 =(按钮)findViewById(R.id.button_6);
            按钮button7 =(按钮)findViewById(R.id.button_7);

            button1.setOnClickListener(本);
            button2.setOnClickListener(本);
            button3.setOnClickListener(本);
            button4.setOnClickListener(本);
            button5.setOnClickListener(本);
            button6.setOnClickListener(本);
            button7.setOnClickListener(本);

        }

        公共无效的onClick(视图v){
            INT渣油;
            INT resId2;
            INT resId3;
            INT resId4;
            INT resId5;
            INT resId6;
            INT resId7;


            开关(v.getId()){
            案例R.id.button_1:
                渣油= R.raw.a;
                MP = MediaPlayer.create(这一点,渣油);

                mp.start();
                打破;
            案例R.id.button_2:
                resId2 = R.raw.b;
                MP2 = MediaPlayer.create(这一点,resId2);
                mp2.start();
                打破;
            案例R.id.button_3:
                resId3 = R.raw.c;
                MP3 = MediaPlayer.create(这一点,resId3);
                mp3.start();
                打破;
            案例R.id.button_4:
                resId4 = R.raw.d;
                MP4 = MediaPlayer.create(这一点,resId4);
                mp4.start();
                打破;
            案例R.id.button_5:
                resId5 = R.raw.e;
                MP5 = MediaPlayer.create(这一点,resId5);
                mp5.start();
                打破;
            案例R.id.button_6:
                resId6 = R.raw.f;
                MP6 = MediaPlayer.create(这一点,resId6);
                mp6.start();
                打破;
            案例R.id.button_7:
                resId7 = R.raw.p;
                MP7 = MediaPlayer.create(这一点,resId7);
                mp7.start();
                打破;

            }


        }

        @覆盖
        公共布尔onCreateOptionsMenu(功能菜单){
            //充气菜单;这增加了项目操作栏,如果它是present。
            。getMenuInflater()膨胀(R.menu.activity_main,菜单);
            返回true;
        }



    }
 

解决方案

看起来像你创建一个新的MediaPlayer实例来播放每一个声音。您应该重新使用它们,或者将它们清除。

在<一个href="http://developer.android.com/reference/android/media/MediaPlayer.html#create%28android.content.Context,%20int%29"相对=nofollow>的MediaPlayer.create()方法的文档:

  

便捷的方法来创建一个MediaPlayer的给定资源ID。上   成功,prepare()将已经被称为切不可   再次调用。

     

当与MediaPlayer的做,你应该调用发布(),以释放   资源如果不释放,太多的MediaPlayer的情况下,将导致   在一个例外。

Here is a simple piano app and it works but there is a problem. After about 20 clicks (sometimes it is exactly 28 clicks) even I click the buttons it doesn't play any sound. The app doesnt crash or doesn't warn me about anything. It is just nothing . There is no sound. Do you have any idea?

package com.example.playaudio;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


    public class MainActivity extends Activity implements OnClickListener{
        private MediaPlayer mp;
        private MediaPlayer mp2;
        private MediaPlayer mp3;
        private MediaPlayer mp4;
        private MediaPlayer mp5;
        private MediaPlayer mp6;
        private MediaPlayer mp7;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            setVolumeControlStream(AudioManager.STREAM_MUSIC);
            Button button1=(Button)findViewById(R.id.button_1);
            Button button2=(Button)findViewById(R.id.button_2);
            Button button3=(Button)findViewById(R.id.button_3);
            Button button4=(Button)findViewById(R.id.button_4);
            Button button5=(Button)findViewById(R.id.button_5);
            Button button6=(Button)findViewById(R.id.button_6);
            Button button7=(Button)findViewById(R.id.button_7);

            button1.setOnClickListener(this);
            button2.setOnClickListener(this);
            button3.setOnClickListener(this);
            button4.setOnClickListener(this);
            button5.setOnClickListener(this);
            button6.setOnClickListener(this);
            button7.setOnClickListener(this);

        }

        public void onClick(View v) {
            int resId;
            int resId2;
            int resId3;
            int resId4;
            int resId5;
            int resId6;
            int resId7;


            switch (v.getId()) {
            case R.id.button_1:
                resId = R.raw.a;
                mp = MediaPlayer.create(this, resId);

                mp.start();
                break;
            case R.id.button_2:
                resId2 = R.raw.b;
                mp2 = MediaPlayer.create(this, resId2);
                mp2.start();
                break;
            case R.id.button_3:
                resId3 = R.raw.c;
                mp3 = MediaPlayer.create(this, resId3);
                mp3.start();
                break;
            case R.id.button_4:
                resId4 = R.raw.d;
                mp4 = MediaPlayer.create(this, resId4);
                mp4.start();
                break;
            case R.id.button_5:
                resId5 = R.raw.e;
                mp5 = MediaPlayer.create(this, resId5);
                mp5.start();
                break;
            case R.id.button_6:
                resId6 = R.raw.f;
                mp6 = MediaPlayer.create(this, resId6);
                mp6.start();
                break;
            case R.id.button_7:
                resId7 = R.raw.p;
                mp7 = MediaPlayer.create(this, resId7);
                mp7.start();
                break;

            }


        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }



    }

解决方案

Looks like you're creating a new MediaPlayer instance to play each sound. You should either reuse them or clean them up.

From the documentation of the MediaPlayer.create() method:

Convenience method to create a MediaPlayer for a given resource id. On success, prepare() will already have been called and must not be called again.

When done with the MediaPlayer, you should call release(), to free the resources. If not released, too many MediaPlayer instances will result in an exception.

这篇关于MediaPlayer的停止播放声音 - 安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆