web-dev-qa-db-ja.com

ボタンクリックアンドロイドで音を再生

クリックしたときにボタンが生の音を再生するようにするにはどうすればよいですか?私はちょうど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;
    }



}
87
Dmitry

これは、元の記事で提供されているコードの最も重要な部分です。

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
    }
});

最後に、前に初期化したボタンの動作を設定します。ボタンクリックで音を鳴らす!これを行うには、ボタンOnClickListenerone を設定します。内部にはonClick()という1つのメソッドしかありません。これには、ボタンで実行する必要がある指示が含まれています クリック時

public void onClick(View v) {
    mp.start();
}

サウンドを再生するために、MediaPlayerの start() メソッドを呼び出します。このメソッドはサウンドの再生を開始します。

そこで、Androidのボタンクリックでサウンドを再生できるようになりました。


ボーナス部分:

下記のコメントにあるようにLangusten Gustelさん、ありがとうございます。そして、 Android Developer Reference で推奨されているように、 release() メソッドを呼び出して、使用されなくなるリソースを解放することが重要です。通常、これは再生するサウンドの再生が完了した後に行われます。そのためには、 OnCompletionListenermpに追加します。

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();
            }
        });
    }
}
185
Keale

テスト済みで動作している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);
}
34
DeathRs

これを行うための最良の方法はここで私は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);

そしてそれをプレイ!

楽しむ!

29
sud007
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();
            }
        });
    }
}
8
Auto-Droid ツ
  • オーディオはrawフォルダーに配置する必要があります。存在しない場合は作成します。
  • Rawフォルダーはresフォルダー内にある必要があります
  • 名前に-または特殊文字を含めることはできません。

アクティビティでは、MediaPlayerメソッドまたはonCreateメソッド内にオブジェクトonclickが必要です。MediaPlayerMediaPlayer.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();
            }
        });
}
}
5
res
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();

ボタンが押されたときにファイルが実行されます。

1
NEC
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();
}
});

これを試してみる私はそれがうまくいくと思います

1
Uzzal Prasad

sHUTTER_CLICK、FOCUS_COMPLETE、START_VIDEO_RECORDING、STOP_VIDEO_RECORDINGなど、いくつかの定義済みサウンドがあります。

いいね!

MediaActionSound

メディアおよびカメラAPIによって行われるさまざまなアクションによって生成されるものと一致するサウンドを生成するためのクラス。 ドキュメント

のように使用します。

fun playBeepSound() {
    val sound = MediaActionSound()
    sound.play(MediaActionSound.START_VIDEO_RECORDING)
}
1
Dan Alboteanu

DeathRsの提案に従ってリセットする代わりに:

if (mp.isPlaying()) {
       mp.stop();
       mp.release();
       mp = MediaPlayer.create(context, R.raw.sound);
} mp.start();

mediaPlayerをリセットして、使用を開始できます。

if (mp.isPlaying()) {
       mp.seekTo(0)
}
0