タイトルはほとんどの場合です。MediaPlayerのsetDataSourceが、ファイルパスで設定された着信音のステータス= 0x80000000で失敗しました。2.3.4
私のアプリケーションはsetDataSource(fileInfo)
とsetDataSource(mContext, Uri.parse(fileInfo))
の両方を使用して(SDカード上のカスタム着信音のために、私は信じている)content://media/internal/audio/media/387
またはcontent://media/external/audio/media/1655
のようなURIで指さ着メロを果たしてきました。
いずれの場合も、Android 4.x(異なるバージョン)を使用している携帯電話では、setDataSource failed.: status=0x80000000
の例外についての情報がログに記録されています。エラーが唯一のコンテンツのURIによって指さ着信音にではなく、パスが指す単一のファイルに何が起こる、私は(まだsetDataSource(mContext, Uri.parse(fileInfo))
を使用している間)は、上記の携帯電話上の問題を修正だけでなく、着メロのパスを使用することを決定したことを見て
/system/media/audio/ringtones/TwirlAway.ogg
のようなパスでファイルに対して
setDataSource failed.: status=0x80000000
:私は例外を除いて、いくつかのログを受け取った
- :
は、しかしそれは(ない鉱山2.3.3にかかわらず)のAndroid 2.3.4-2.3.6と携帯電話で問題を開始しました
私は
what=1
とextra=-2147483648
とのメソッドコールMediaPlayer.onErrorListener.onError(int what, int extra)
についてもログを受け取りました。私の知るところでは、ファイルが見つからないか、破損していると思われます。しかし、私は、このような状況でFile file = new File(fileInfo); if (!file.exists())
チェックを実行し、それがファイルが存在しないことを返された - それは、破損していますか?内部メモリの音楽ファイルはほとんどありません。要約する
:setDataSource("content://media/internal/audio/media/52")
- 作品は例外をスロー:
setDataSource(mContext, "/system/media/audio/ringtones/TwirlAway.ogg")
ためsetDataSource failed.: status=0x80000000
興味深いことに、setDataSource(Context context, Uri uri)
によって呼び出されるsetDataSource(Context context, Uri uri, Headers headers)
方法の最初の数行は、(from GrepCode source for 2.3.4)です。
String scheme = uri.getScheme();
if(scheme == null || scheme.equals("file")) {
setDataSource(uri.getPath());
return;
}
結局のところ、setDataSource("/system/media/audio/ringtones/TwirlAway.ogg")
で失敗します。私はurisからringtonesへの道を取ってきました:
private static String getRingtonePathFromContentUri(Context context,
Uri contentUri) {
String[] proj = { MediaStore.Audio.Media.DATA };
Cursor ringtoneCursor = context.getContentResolver().query(contentUri,
proj, null, null, null);
ringtoneCursor.moveToFirst();
return ringtoneCursor.getString(ringtoneCursor
.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
}
何がエラー投げの原因になりますか?たぶん、これらは読み込み権限の不足によって引き起こされるいくつかの問題ですか? ネイティブのsetDataSource(文字列パス)関数のソースコードが大いに役立つと思いますが、それを見つけることができませんでした。
私はこの問題をほぼ1か月間解決しようとしました。私たちのアプリは**アラームアプリ**です。これは音楽や着メロを完全に午前中に再生するはずですが、今まで音楽を再生するときに非常に多くのクラッシュがあります。 –
私はこの問題のためにイライラされていて、私の**月**を救った! –
/storage/emulated/0/IDM/Music/xxx.mp3のようにパスを使って作業するには?これでもこれは失敗しています。 – jeevs