2011-12-07 9 views
0

私はonClickListenerを持っており、サウンドを追加する必要があります。アンドロイドプレイサウンドフォームsd-cardボタンクリック後

ボタンを押すと、サウンドが開始されます。それはSDカード上にある。

MediaPlayerを使用しようとしましたが、リソースIDをコンストラクタに入れる必要があります。

MediaPlayer.create(cont, resid); 

resourseからの絶対パスではありません。

これを行う方法?

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

しかしERRを得る:

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

はい可能です。 –

+0

なぜあなたは答えなかったのですか? – Val

+1

これが可能かどうか尋ねました。私ははいと答えた。それはあなたの質問に対する答えです。これがどう実現されるか知りたいのであれば、適切な質問をしてください*。私はちょうどあなたの質問の質がいくらか低いことをあなたに示したいと思っていました。編集して詳細を記入してください。ありがとう。 –

答えて

3

あなたが代わりにリソースIDを持つ変異体MediaPlayer.create(context, uri)を使用する必要があります

は次のように行うようにしてください。この方法で、単純なファイル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

メディアにあまり慣れていないことにご注意くださいフレームワーク*(まだ自分の仕事のためにそれを必要としていなかった)*。これは、私が数分で思いついた、小さく働くサンプルです。ボタンをクリックするだけで音を出すことができると確信していました。質問を編集していただきありがとうございます。 :) –

+0

私はあなたが言ったように、この行ではmp.start();私はエラーが発生します.. – Val

+0

mp.start()のようにNullPointerExceptionで失敗します。これは、 'MediaPlayer.create()'が 'null'を返したため何とか失敗したことを意味します。私はあなたがファイルの場所と名前を変更したことを確認してください*(あなたのファイルはおそらくtest.mp3とは違う名前になります)*。 –

関連する問題