2011-12-07 53 views
0

我有onClickListener,我需要给它添加声音。Android播放声音形式的SD卡后点击按钮

当我按下按钮时,声音必须开始。它在sd卡上。

我尝试使用MediaPlayer,但它需要将resourse id放入构造函数中。

MediaPlayer.create(cont, resid); 

我需要绝对路径而不是资源ID。

如何做到这一点?

试着这样做:

File mp3File = new File(Environment.getExternalStorageDirectory(), "test.mp3"); 
Uri mp3Uri = Uri.fromFile(mp3File); 
Button yourButton = (Button) findViewById(R.id.button); 
final MediaPlayer mp = MediaPlayer.create(this, mp3Uri); 

yourButton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     mp.start(); 
    } 
}); 

但得到一个错误:

12-07 20:50:24.198: E/AndroidRuntime(6124): FATAL EXCEPTION: main 
12-07 20:50:24.198: E/AndroidRuntime(6124): java.lang.NullPointerException 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at izuchaika.act.click_myOnClickListener.onClick(click_myOnClickListener.java:30) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at android.view.View.performClick(View.java:2532) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at android.view.View$PerformClick.run(View.java:9277) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at android.os.Handler.handleCallback(Handler.java:587) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at android.os.Looper.loop(Looper.java:143) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at android.app.ActivityThread.main(ActivityThread.java:4196) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at java.lang.reflect.Method.invoke(Method.java:507) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
12-07 20:50:24.198: E/AndroidRuntime(6124):  at dalvik.system.NativeStart.main(Native Method) 
+0

是的,这是可能的。 – 2011-12-07 17:24:21

+0

为什么你没有回答呢? – Val

+1

你问这是否可能。我回答是的。这实际上是你的问题的答案。如果您想知道如何实现这一点,请提出相应的问题*(并显示您已经发现或尝试的内容)*。我只是想告诉你,你的问题质量有点低。请编辑它并填写一些细节。谢谢。 – 2011-12-07 17:34:50

回答

3

您应该使用MediaPlayer.create(context, uri)而不是与资源ID的变种。这样你就可以用简单的文件uri初始化媒体播放器,例如像这样:

File mp3File = new File(Environment.getExternalStorageDirectory(), "test.mp3"); 
Uri mp3Uri = Uri.fromFile(mp3File); 
Button yourButton = (Button) findViewById(R.id.button); 
final MediaPlayer mp = MediaPlayer.create(this, mp3Uri); 

yourButton.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     mp.start(); 
    } 
}); 

在这种情况下的文件是MP3,名为test.mp3并放置在SD卡或外部存储的根文件夹。您可能需要调整以适应您的需求。

+0

请注意,我对媒体不太熟悉框架*(不需要它为我自己的工作)*。这是一个小的,工作的样本,我想在几分钟内。我只是确定可以通过点击按钮播放声音。把它作为表达谢意编辑问题的一种方式。 :) – 2011-12-07 18:12:07

+0

我喜欢你说,但在这一行mp.start();我得到错误.. – Val

+0

似乎mp.start()失败,带有NullPointerException。这意味着'MediaPlayer.create()'失败了,因为它返回了'null'。我会说确保你相应地改变了文件的位置和名称*(你的文件很可能与test.mp3有不同的名称)*。 – 2011-12-07 19:02:54