【问题标题】:Play mp3 file from raw resource on click of a TextView单击 TextView 从原始资源播放 mp3 文件
【发布时间】:2011-07-24 22:11:46
【问题描述】:

我想在单击文本时播放某个 mp3 文件。比如我点了“Nicholas”这个词,app就得播放nicholas.mp3了。

抱歉我的代码乱七八糟,我是android dev的新手:

package com.example.playword;

import java.io.IOException;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
//import android.os.Handler;
import android.view.View;
//import android.view.View.OnClickListener;
//import android.widget.Button;
import android.widget.TextView;

public class PlayWord extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //final Handler mHandler = new Handler();
         
        final TextView nicholas = (TextView) findViewById(R.id.nicholas);
        final TextView was = (TextView) findViewById(R.id.was);
        
        nicholas.setText("Nicholas ");
        was.setText("was ");        
        
        /*
        Button btn = (Button) (findViewById(R.id.nicholasBtn));
        
        btn.setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {
                nicholas.setText("Nicholas (Clicked!) ");
            }

          });
        */
        
        View.OnClickListener handler = new View.OnClickListener(){
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.nicholas: // doStuff
                        
                        MediaPlayer mPlayer = MediaPlayer.create(null, R.raw.aaanicholas);
                        
                        try {
                            mPlayer.prepare();
                        } catch (IllegalStateException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        
                        mPlayer.start();
                        
                        nicholas.setText("Nicholas (Clicked!) ");
                        break;
                        
                    case R.id.was: // doStuff
                        
                        MediaPlayer mPlayer1 = MediaPlayer.create(null, R.raw.aaawas);
                        
                        try {
                            mPlayer1.prepare();
                        } catch (IllegalStateException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        
                        mPlayer1.start();
                        
                        was.setText("was (Clicked!) ");
                        break;
                }
            }
        };

        findViewById(R.id.nicholas).setOnClickListener(handler);
        findViewById(R.id.was).setOnClickListener(handler);
        
    }
}

当我运行它时,我遇到了强制关闭错误。您对此有更好的想法吗?

【问题讨论】:

标签: android mp3 listener media-player


【解决方案1】:

您需要将上下文实例传递给MediaPlayer.create 方法:

MediaPlayer mPlayer = MediaPlayer.create(PlayWorld.this, R.raw.aaanicholas);

另外,在create() 调用之后,prepare 已经执行,所以你不需要显式执行它,只需在create() 之后调用start()

【讨论】:

    【解决方案2】:

    当您创建mPlayer 对象时,您应该将上下文传递给它,在您的情况下为PlayWord.this

    【讨论】:

      【解决方案3】:
      MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile);
          mPlayer.start();
      

      【讨论】:

      • 请避免仅给出代码答案。尝试解释您的代码如何解决 OP 的问题。如果你能提供一些背景和说明,它对每个人都更有帮助,尤其是那些没有你经验的人。
      【解决方案4】:
      val mediaPlayer = MediaPlayer.create(this,R.raw.music)
          mediaPlayer.isLooping=true
          mediaPlayer.start()
          music_on_off_button.setOnClickListener {
              if (mediaPlayer.isPlaying){
                  mediaPlayer.pause()
              }else{
                  mediaPlayer.start()
              }
          }
      

      通过isPlaying()方法可以知道音乐播放与否

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多