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类变量,并与的生命周期以及处理其生命周期Fragment或Activity使用它.但是,这是另一个问题的主题.为了保持这个答案的范围很小,我写这篇文章只是为了说明如何在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)
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)
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)
玩吧!
玩得开心!
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)
有一些预定义的声音: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)
raw文件夹中,如果不存在,请创建一个。-或特殊字符。在您的活动中,您需要MediaPlayer在onCreate方法或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)
| 归档时间: |
|
| 查看次数: |
223230 次 |
| 最近记录: |