クリックしたときにボタンが生の音を再生するようにするにはどうすればよいですか?私はちょうど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;
}
}
これは、元の記事で提供されているコードの最も重要な部分です。
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();
}
});
ステップバイステップで説明するには:
Button one = (Button) this.findViewById(R.id.button1);
1つ目は、サウンドの再生に使用されるボタンの初期化です。アクティビティの findViewById
を使用して、割り当てたID(この例の場合はR.id.button1
)を渡して、必要なボタンを取得します。初期化中の変数Button
に代入するのが簡単になるように、これをone
としてキャストします。これがどのように機能するのかをさらに説明することは、この回答の範囲外です。 この はそれがどのように働くかについての簡単な洞察を与えます。
final MediaPlayer mp = MediaPlayer.create(this, R.raw.soho);
これは MediaPlayer
を初期化する方法です。 MediaPlayerは 静的ファクトリメソッドデザインパターン に従います。インスタンスを取得するには、その create()
メソッドを呼び出し、再生したいサウンドのコンテキストとリソースID、この場合はR.raw.soho
を渡します。これをfinal
として宣言します。 Jon Skeetが、なぜそうするのか 、ここで 、素晴らしい説明をしてくれました。
one.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
//code
}
});
最後に、前に初期化したボタンの動作を設定します。ボタンクリックで音を鳴らす!これを行うには、ボタンOnClickListener
の one
を設定します。内部にはonClick()
という1つのメソッドしかありません。これには、ボタンで実行する必要がある指示が含まれています クリック時 。
public void onClick(View v) {
mp.start();
}
サウンドを再生するために、MediaPlayerの start()
メソッドを呼び出します。このメソッドはサウンドの再生を開始します。
そこで、Androidのボタンクリックでサウンドを再生できるようになりました。
ボーナス部分:
下記のコメントにあるようにLangusten Gustelさん、ありがとうございます。そして、 Android Developer Reference で推奨されているように、 release()
メソッドを呼び出して、使用されなくなるリソースを解放することが重要です。通常、これは再生するサウンドの再生が完了した後に行われます。そのためには、 OnCompletionListener
をmp
に追加します。
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
//code
}
});
onCompletion
メソッドの中で、私たちはそのようにそれを解放します :
public void onCompletion(MediaPlayer mp) {
mp.release();
}
これを実装するには明らかにより良い方法があります。たとえば、MediaPlayerをクラス変数にして、それを使用するFragment
またはActivity
のライフサイクルとともにそのライフサイクルを処理できます。しかし、これは別の質問のトピックです。この答えの範囲を狭くするために、私は Androidのボタンクリックでサウンドを再生する方法 を説明するためだけに書いています。
最初。あなたはあなたのステートメントをブロックの中に、そしてこの場合onCreateメソッドの中に置くべきです。
第二。ボタンを変数として初期化しました 1その後、あなたは変数を使用しました ゼロ onClickListenerを不完全なonClickListenerに設定します。変数を使う 1 setOnClickListenerの場合.
3つ目は、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();
}
});
}
}
テスト済みで動作している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(); }
}
});
}
}
これですべて完了しました
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = MediaPlayer.create(context, R.raw.sound);
}
これを行うための最良の方法はここで私はLogCatで次々に1つの問題を検索した後に見つけます
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();
しない解放メディアプレイヤーはあなたにLogCatでこのエラーを出します:
Android:MediaPlayerがリリースされずに完成
しないリセットメディアプレーヤーはあなたにLogCatでこのエラーを出します:
Android: mediaplayer went away with unhandled events
メディアプレーヤーを使用するために安全で簡単なコードを再生してください。
同じActivity/Fragmentで複数のサウンドを再生するには、新しいMedia Playerを作成しながらresIDを変更するだけです。
mp = MediaPlayer.create(context, R.raw.sound_two);
そしてそれをプレイ!
楽しむ!
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();
}
});
}
}
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();
}
});
}
}
public class MainActivity extends AppCompatActivity {
public void clickMe (View view) {
MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
mp.start();
}
ボタンが押されたときにメソッドが呼び出される(onCreate)
それからあなたのファイルのパスで(MediaPlayer)クラスのための変数を作成します
MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
最後にそのクラスのstartメソッドを実行する
mp.start();
ボタンが押されたときにファイルが実行されます。
Button button1=(Button)findViewById(R.id.btnB1);
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
MediaPlayer mp1 = MediaPlayer.create(this, R.raw.b1);
mp1.start();
}
});
これを試してみる私はそれがうまくいくと思います
sHUTTER_CLICK、FOCUS_COMPLETE、START_VIDEO_RECORDING、STOP_VIDEO_RECORDINGなど、いくつかの定義済みサウンドがあります。
いいね!
MediaActionSound
メディアおよびカメラAPIによって行われるさまざまなアクションによって生成されるものと一致するサウンドを生成するためのクラス。 ドキュメント
のように使用します。
fun playBeepSound() {
val sound = MediaActionSound()
sound.play(MediaActionSound.START_VIDEO_RECORDING)
}
DeathRsの提案に従ってリセットする代わりに:
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = MediaPlayer.create(context, R.raw.sound);
} mp.start();
mediaPlayerをリセットして、使用を開始できます。
if (mp.isPlaying()) {
mp.seekTo(0)
}