在按钮上播放声音单击android

Dmi*_*try 93 audio android click playback android-mediaplayer

单击时如何从原始按钮播放声音按钮?我刚刚创建了一个带id的按钮button1,但无论我写的代码是什么,都是错的.

import android.media.MediaPlayer;

public class BasicScreenActivity extends Activity {

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

    Button one = (Button)this.findViewById(R.id.button1);
    MediaPlayer = mp;
    mp = MediaPlayer.create(this, R.raw.soho);
    zero.setOnCliclListener(new View.OnClickListener() )

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



}
Run Code Online (Sandbox Code Playgroud)

Kea*_*ale 197

这是原帖中提供的代码中最重要的部分.

Button one = (Button) this.findViewById(R.id.button1);
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
one.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        mp.start();
    }
});
Run Code Online (Sandbox Code Playgroud)

逐步解释:

Button one = (Button) this.findViewById(R.id.button1);
Run Code Online (Sandbox Code Playgroud)

首先是用于播放声音的按钮的初始化.我们使用Activity findViewById,传递我们分配给它的Id(在本例中为:):R.id.button1获取我们需要的按钮.我们将其转换为Button可以很容易地将其分配给one我们正在初始化的变量.解释更多如何工作超出了这个答案的范围.简要介绍了它的工作原理.

final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
Run Code Online (Sandbox Code Playgroud)

这是如何初始化a MediaPlayer.MediaPlayer遵循静态工厂方法设计模式.为了获得一个实例,我们调用它的create()方法并将它传递给我们想要播放的声音的上下文和资源Id,在这种情况下R.raw.soho.我们声明为final.乔恩斯基特提供了为什么我们如此做了很好的解释在这里.

one.setOnClickListener(new OnClickListener(){

    public void onClick(View v) {
        //code
    }
});
Run Code Online (Sandbox Code Playgroud)

最后,我们设置我们之前初始化的按钮将执行的操作.点击按钮播放声音!为此,我们设置OnClickListener了按钮one.内部只有一种方法,onClick()其中包含按钮在单击时应执行的操作.

public void onClick(View v) {
    mp.start();
}
Run Code Online (Sandbox Code Playgroud)

要播放声音,我们称之为MediaPlayer的start()方法.此方法开始播放声音.

在那里,你现在可以在Android按钮点击播放声音了!


奖金部分:

正如下面的评论中所述,感谢Langusten Gustel!,并且根据Android Developer Reference中的建议,调用该release()方法释放不再使用的资源非常重要.通常,一旦要播放的声音完成播放就完成.为此,我们添加了一个OnCompletionListener我们mp 这样的:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
    public void onCompletion(MediaPlayer mp) {
        //code
    }
});
Run Code Online (Sandbox Code Playgroud)

onCompletion方法内部,我们发布它:

public void onCompletion(MediaPlayer mp) {
    mp.release();
}
Run Code Online (Sandbox Code Playgroud)

显然有更好的方法来实现这一点.例如,你可以在MediaPlayer类变量,并与的生命周期以及处理其生命周期FragmentActivity使用它.但是,这是另一个问题的主题.为了保持这个答案的范围很小,我写这篇文章只是为了说明如何在Android按钮点击时播放声音.


原帖

第一.您应该将语句放在一个块中,在本例中是onCreate方法.

第二.您将按钮初始化为变量1,然后使用变量并将其onClickListener设置为不完整的onClickListener.使用变量one作为setOnClickListener.

第三,把逻辑放在onClick里面播放声音.

综上所述:

import android.app.Activity;
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 BasicScreenActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_basic_screen);

        Button one = (Button)this.findViewById(R.id.button1);
        final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
        one.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {
                mp.start();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 不要去'RELEASE` (6认同)
  • 喜欢详细的方法!! StackOverflow中的更多人应该像你一样 (4认同)

Dea*_*hRs 35

经过测试和工作100%

public class MainActivity extends ActionBarActivity {
    Context context = this;
    MediaPlayer mp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        mp = MediaPlayer.create(context, R.raw.sound);
        final Button b = (Button) findViewById(R.id.Button);
        b.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                try {
                    if (mp.isPlaying()) {
                        mp.stop();
                        mp.release();
                        mp = MediaPlayer.create(context, R.raw.sound);
                    } mp.start();
                } catch(Exception e) { e.printStackTrace(); }
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是我们所要做的

if (mp.isPlaying()) {
    mp.stop();
    mp.release();
    mp = MediaPlayer.create(context, R.raw.sound);
}
Run Code Online (Sandbox Code Playgroud)

  • 这在重播音频时也有效。播放声音时,我认为 mp.start() 将在没有 try / catch 和 if 块的情况下工作。 (2认同)

sud*_*007 33

这是我在LogCat中搜索其他问题后找到的最佳方法

MediaPlayer mp;
mp = MediaPlayer.create(context, R.raw.sound_one);
mp.setOnCompletionListener(new OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mp.reset();
        mp.release();
        mp=null;
    }
});
mp.start();
Run Code Online (Sandbox Code Playgroud)

释放媒体播放器会在LogCat中出现此错误:

Android:MediaPlayer未经发布而最终确定

重置媒体播放器会在LogCat中出现此错误:

Android: mediaplayer went away with unhandled events
Run Code Online (Sandbox Code Playgroud)

因此,使用安全和简单的代码来使用媒体播放器.

要在同一个活动/片段中播放多个声音,只需在创建新的媒体播放器时更改resID

mp = MediaPlayer.create(context, R.raw.sound_two);
Run Code Online (Sandbox Code Playgroud)

玩吧!

玩得开心!


Aut*_*d ツ 8

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

public class MainActivity extends Activity {
    MediaPlayer mp;
    Button one;

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

        mp = MediaPlayer.create(this, R.raw.soho);
        one = (Button)this.findViewById(R.id.button1);

        one.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mp.start();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)


Dan*_*anu 6

有一些预定义的声音:SHUTTER_CLICK、FOCUS_COMPLETE、START_VIDEO_RECORDING、STOP_VIDEO_RECORDING。

好的!

媒体动作音效

用于产生与媒体和相机 API 采取的各种操作产生的声音相匹配的声音的类。文档

使用像:

fun playBeepSound() {
    val sound = MediaActionSound()
    sound.play(MediaActionSound.START_VIDEO_RECORDING)
}
Run Code Online (Sandbox Code Playgroud)

  • @PeymanMajidi Java 版本 'private void playBeepSound(){ MediaActionSound sound = new MediaActionSound(); sound.play(MediaActionSound.START_VIDEO_RECORDING); }' (2认同)

res*_*res 5

  • 音频必须放置在raw文件夹中,如果不存在,请创建一个。
  • 原始文件夹必须在res文件夹内
  • 名称中不得包含任何-或特殊字符。

在您的活动中,您需要MediaPlayeronCreate方法或onclick方法内部具有一个对象,您必须初始化MediaPlayer,例如MediaPlayer.create(this, R.raw.name_of_your_audio_file),然后准备好与调用一起播放音频文件start(),因为在这种情况下,您希望如果将其放置在按钮中,则必须将其放入onClick方法中。

例:

private Button myButton;
private MediaPlayer mp;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.myactivity);
        mp = MediaPlayer.create(this, R.raw.gunshot);

        myButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mp.start();
            }
        });
}
}
Run Code Online (Sandbox Code Playgroud)