トムキャットです。
着信音か通知音をRingtonePreferenceで選び、それをMediaPlayerで再生しています。簡略化していますが、次のようなコード
です。(実際にはurlは固定ではありません。)
String url;
url = Settings.System.DEFAULT_NOTIFICATION_URI.toString();
Uri ringtoneUri = Uri.parse(url);
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(context,ringtoneUri);
mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
mp.setLooping(false);
mp.prepare();
mp.start();
多くの場合はこれでいいのですが、これだとsetDataSourceに失敗する場合があることを、ACRAのクラッシュレポートから認知していまし
た。(自分の端末ではどうしても再現しませんが。)そして、IS03内蔵の長めの着信音を使っていたところ、これまで見たことのない、
“PVMFErrNotSupported”
“Prepare failed.: status=0×1″
というエラーが起きました。これは必ず起きるわけではなく、何度も再生しているとふいに起きます。理由がさっぱり分かりません。で、
http://blog.pocketjourney.com/2009/12/27/android-streaming-mediaplayer-tutorial-updated-to-v1-5-cupcake/
によると、setDataSourceにはパスではなくて、FileDescriptorを渡すのが良い、とあります。
ここから質問です。
①RingtonePreferenceから得た"content://settings/system/notification_sound"など
のurlから、
FileDescriptorを手に入れるにはどうすればいいでしょうか。
②MediaPlayterでPVMFErrNotSupportedを避けるにはsetDataSourceにFileDescriptor渡すべ
き、
というのは「よく知られていること」なのでしょうか。