点击按钮播放声音?

时间:2014-08-20 15:10:19

标签: android media-player

我的代码中有一种播放音乐的方法,但它不是很有用。红色下划线在一行...这是我的代码:

public class MyActivity2 extends Activity {
private String[] colors;
private String[] values;
private TextView tv;
private RelativeLayout rl;
private MediaPlayer mp;
Button n;
int index = 0;
int position2;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_activity2);
    n = (Button) findViewById(R.id.button);
    tv = (TextView) findViewById(R.id.textView);
    rl = (RelativeLayout) findViewById(R.id.layout_view);

    Typeface typeface = Typeface.createFromAsset(getAssets(), "BebasNeue Bold.ttf");
    n.setTypeface(typeface);
    Typeface face = Typeface.createFromAsset(getAssets(), "OSP-DIN.ttf");
    tv.setTypeface(face);

            values = getResources().getStringArray(R.array.allthings_array);
            colors = getResources().getStringArray(R.array.colorcode_array);

    n.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            // mp = new MediaPlayer();
            mp = MediaPlayer.create(this, R.raw.pop);
            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mp.setLooping(true);
            mp.start();

        }
    });
            n.setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            if (index == 5) {
                                Toast.makeText(getApplicationContext(), "More coming soon!", Toast.LENGTH_SHORT).show();
                            } else {
                                position2 = (index++);
                            }
                            String textValue = values[position2];
                            tv.setText(textValue);
                            Random RAND = new Random();
                            int position = RAND.nextInt(colors.length);
                            String nextValue = colors[position];
                            rl.setBackgroundColor(Color.parseColor(nextValue));
                            n.setBackgroundColor(Color.argb(00, 00, 00, 00));
                            return true;
                        case MotionEvent.ACTION_UP:
                            n.setBackgroundColor(Color.argb(00, 00, 00, 00));
                            return true;
                        default:
                            return false;

                    }
                }
            });
        }

在行:mp = MediaPlayer.create(this,R.raw.pop); ,(这个,R.raw.pop)用红色下划线表示它无法解决方法.. 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

MediaPlayer.create()方法中的第一个参数是上下文。当您在Activity类中时,通常可以使用this作为上下文。这里棘手的部分,这是Android的一个常见错误,就是该行上的this指的是您定义的View.OnClickListener。它被称为匿名内部阶级。

您可以通过将行更改为

来解决此问题
mp = MediaPlayer.create(MyActivity2.this, R.raw.pop);

完整的OnClickListener(使用我自己的mp3原始文件验证):

n.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mp = MediaPlayer.create(MyActivity2.this, R.raw.pop);
        mp.setLooping(true);
        mp.start();
    }
});

答案 1 :(得分:1)

你应该像mp = MediaPlayer.create(MyActivity2.this, R.raw.pop);那样做,因为你是从内部类做的,因此this引用onClickListenerMediaPlayer.create方法不接受这样的论证。