【问题标题】:Sound doesn't play when pressing button?按下按钮时没有声音?
【发布时间】:2014-08-19 23:01:14
【问题描述】:

所以目前我已经实现了这段代码:

最终的 MediaPlayer mp = new MediaPlayer(); 按钮 b = (Button) findViewById(R.id.button);

    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (mp.isPlaying()) {
                mp.stop();
                mp.reset();
            }
            try {

                AssetFileDescriptor afd;
                afd = getAssets().openFd("pop.mp3");
                mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mp.prepare();
                mp.start();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    });

完全没有错误。应用程序启动并正常工作,但即使上述方法已经实施,我也听不到任何声音。

这是我的其余代码:

public class MyActivity2 extends Activity {
private String[] colors;
private String[] values;
private TextView tv;
private RelativeLayout rl;
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);

    final MediaPlayer mp = new MediaPlayer();
    Button b = (Button) findViewById(R.id.button);

    b.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (mp.isPlaying()) {
                mp.stop();
                mp.reset();
            }
            try {

                AssetFileDescriptor afd;
                afd = getAssets().openFd("Facebook Chat 'pop' Sound 3.mp3");
                mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
                mp.prepare();
                mp.start();
            } catch (IllegalStateException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {

            }

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

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

        @Override
        public void onBackPressed() {
            super.onBackPressed();
            overridePendingTransition(R.anim.animation4, R.anim.animation3);
        }
    }

【问题讨论】:

  • 您确定没有错误吗?您应该添加一个catch (Exception e) 子句以防万一。
  • 是的 - 就像你在“这是我的其余代码部分”中所做的那样,除了括号之间的 e.printStackTrace()。
  • 如果文件在下次点击之前完成播放,该代码将遇到状态 128 错误。如果您检查状态图,您会发现 PlaybackComplete 不是 .isPlaying(),但返回 Idle 状态的唯一方法是 .reset()。因此,您将处于 PlaybackComplete 状态,而不是在播放,因此您不会重置,然后在不在空闲状态时尝试 .setDataSource()。移动 mp.reset();走出那个括号,并始终这样做。

标签: android audio media-player


【解决方案1】:

首先我建议你在 res 文件夹中创建一个名为 raw 的新文件夹,然后将你的音频文件放在这个文件夹中。

然后在 onClick 方法中编写此代码源:

b.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();

        }
    });

;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2013-02-17
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多