2012-03-02 5 views
1

メディアプレーヤをシングルトンとして設定して、プロジェクトのさまざまなアクティビティから制御できるようにしています。多くの研究が私に次のコードにつながった。生データソースをメディアプレイヤーシングルトンに設定する

if (current_player == null) 
{ 
    try 
    { 
     current_player = MusicPlayer.getInstance(); 
     AssetFileDescriptor afd = this.getResources().openRawResourceFd(R.raw.mytune); 
     current_player.setDataSource(afd.getFileDescriptor()); 
     current_player.prepare(); 
     current_player.setLooping(true); 
     current_player.start(); 
     afd.close(); 
} 
catch (IllegalArgumentException e) { Log.e("IllegalArgumentException", "error: " + e.getMessage(), e); } 
catch (IllegalStateException e) {Log.e("IllegalStateException", "error: " + e.getMessage(), e); } 
catch (IOException e) {Log.e("IOException", "error: " + e.getMessage(), e); } 
catch (Exception e){ Log.e("Main media player", "error: " + e.getMessage(), e); 
     } 

私は
1のMediaPlayerが作成されていることを知っています
2. AssetFileDescriptorが正しいファイルのコードがIOExceptionを
エラーと.setDataSourceラインで失敗

ためのものです: setDataSourceFDが失敗しました:status = 0x80000000

このコードは、動作するはずのさまざまなフォーラムに表示されている多くの例と意図的に似ています。 は私が

current_player= MediaPlayer.create(this, R.raw.mytune); 

が正常に動作することを証明している明確にすること。

私は非常に感謝しています。

答えて

4

アセットにファイルを保存します。 СorrectラインAssetFileDescriptor AFD = ...

AssetFileDescriptor afd = context.getAssets().openFd(fileName); 
current_player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); 
+0

上のあなたは私のために問題を解決しました。ファイルはres/rawディレクトリに置くことができます。問題は、.setDataSource(afd.getFileDescriptor()、afd.getStartOffset()、afd.getLength())を使用する必要があることです。 – Squiggles

関連する問題