2011-03-29 72 views
19

嗨,大家好,我想播放某个MP3文件时单击文本。例如,我点击单词“尼古拉斯”号,应用程序必须发挥nicholas.mp3 ...Android:从原始资源播放MP3文件点击TextView

对不起,我的乱码,我是新来的Android开发人员:

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

    } 
} 

当我运行这个,我得到一个关闭力的错误..你对这个有更好的想法吗?提前谢谢了!

回答

44

你必须在一个上下文实例传递到MediaPlayer.create方法:

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

此外,create()电话后,准备已经执行,所以你并不需要显式执行它,只需调用start()权之后create()

4

当你创建mPlayer对象时,你应该把它传递给Context,这在你的情况下是PlayWord.this

0
MediaPlayer mPlayer = MediaPlayer.create(FakeCallScreen.this, R.raw.mysoundfile); 
    mPlayer.start(); 
+0

请避免给出只有代码的答案。尝试解释您的代码如何解决OP的问题。如果你能提供一些背景和说明,那对每个人都更有帮助,特别是那些经验不如你的人。 – 2016-12-31 19:39:19