2011-01-05 5 views
0

/res/rawフォルダのリソースにプログラムで(特に... mp3ファイル)アクセスしようとしています。エミュレータでは、次のテンプレートが私に役立ちます。電話でres/rawリソースにアクセスする際の問題...エミュレータでうまく動作します

Uri uri = Uri.parse("android.resource://com.foo.bar/raw/name_of_resource"); 
MediaPlayer mp3 = MediaPlayer.create(this, uri); 

実際の電話では、MediaPlayer.create()メソッドはnullを返します。何がありますか?プログラムでリソースにアクセスするより良い方法はありますか?

P.S.

私は理由のためMediaPlayer.create(this, R.raw.name_of_resource)を使用していません。私の特別な状況では、リソースの名前を生成することは、リソースのidを見つけるよりはるかに簡単です。 (つまり、私はかなり簡単にStringname_of_resourceを把握することができますが、実際のinteger idR.raw.name_of_resourceを推測することはAAより多くの仕事と多くのswitch文を伴うだろう。

+0

権限の問題ですか?エミュレータでは、実際のデバイスにアクセスするより多くのアクセスを与えると思います。リフレクションの使用はどうですか? – NKijak

+0

私は許可の問題ではないと思います。プログラムに任意のmp3を再生すると、うまく動作します。反射を使用することをどのようにお勧めしますか? – dfetter88

答えて

0

プログラムでリソースにアクセスするためのより良い方法はありますか?

MediaPlayerに静的create()メソッドを使用します。私の特定の状況で

を、はるかeasieですリソースのIDを特定するよりも、リソースの名前を生成することができます。

リソースIDを取得するにはgetResources().getIdentifier()を使用してください。

+0

お返事ありがとうございます。あなたが示唆したように、getResources()。getIdentifier()を無駄にしようとしましたが(まだエミュレータ上で動作します)。私はあなたが 'MediaPlayerで静的なcreate()メソッドを使うのはどういう意味ですか?私が元の投稿で使った方法は静的です。あなたは詳しく説明できますか? – dfetter88

+0

コードはエミュレータで動作するので、気分はいいです。私の電話が生のリソースにアクセスできない他の理由はありますか? – dfetter88

+0

@ dfetter88:ここに、生のリソースとして保存されたオーディオを再生するサンプルプロジェクトがあります:https://github.com/commonsguy/cw-advandroid/tree/master/Media/Audio - ハードウェアとエミュレータで正常に動作します。 – CommonsWare

関連する問題