按下按钮播放音频声音,不重复

时间:2014-09-22 01:21:54

标签: android audio

我希望能够让您单击一个按钮来启动并再次单击以停止,或者每次单击时都不会启动多个声音的开始按钮。我有一个音频文件,如果你点击开始3次,它有3个不同的轨道同时进行。停止按钮只停止一个,其他曲目一直播放,直到我杀死应用程序。

这是我的代码。我是菜鸟

package com.example.mitch_000.button;

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

public class MyActivity extends Activity {

    MediaPlayer player;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        Button button1=(Button)findViewById(R.id.button1);
        Button button2=(Button)findViewById(R.id.button2);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                player=MediaPlayer.create(MyActivity.this,R.raw.lw);

                player.start();}

        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                player.stop();

            }

        });

    }

}

2 个答案:

答案 0 :(得分:1)

当您在player=MediaPlayer.create(MyActivity.this,R.raw.lw);中致电OnClickListener时,您正在创建音频文件的新实例,然后在每次点击该按钮时播放

您需要在playerOnClickListener)之外创建OnCreate对象的单个实例,然后您可以使用此引用来播放,暂停和停止一个音频文件。

以下是您可以使用的代码:

package com.example.mitch_000.button;

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

public class MyActivity extends Activity {

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

    player=MediaPlayer.create(MyActivity.this,R.raw.lw);
    Button button1=(Button)findViewById(R.id.button1);
    Button button2=(Button)findViewById(R.id.button2);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player.start();
        }

    });
    button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player.stop();
        }

    });
}

答案 1 :(得分:-1)

MediaPlayer mp = MediaPlayer.create(this, R.raw.mamacita_zero);

setOnClickListener之外

像这样

 public class MyActivity extends Activity {
 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    Button button1=(Button)findViewById(R.id.button1);
    Button button2=(Button)findViewById(R.id.button2);

    MediaPlayer mp = MediaPlayer.create(MyActivity.this,R.raw.lw);


    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            mp.start();
        }
    });

  button2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player.stop();

        }

    });

  }

  }

您似乎每次点击都比您需要的更多。您正在为Activity的视图中的每次单击创建并添加新的onClickListener,而不是Button。您只需要设置一次侦听器,而不是设置Button而不是整体视图;我倾向于在Activity的构造函数中这样做。