そこで、スクロール可能なタブ + スワイプ ナビゲーションを備えたアプリを作成しています。すべてのタブのページで、別のオーディオ ファイルを再生したいと考えています。
以下は私のフラグメントの OnCreateView で、mediaplayer の初期化、FileDescriptor を含み、assets フォルダー内の a.mp3 という名前のオーディオ ファイルを再生しています。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main_dummy,
container, false);
///Playing sound from here on
AssetFileDescriptor fda;
MediaPlayer amp = new MediaPlayer();
try {
fda = getAssets().openFd("a.mp3");//// GIVES ERROR !
amp.reset();
amp.setDataSource(fda.getFileDescriptor());
amp.prepare();
amp.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return rootView;
}
}
GetAssets() メソッドは、次のようなエラーを返します。
Cannot make a static reference to the non-static method getAssets() from the type ContextWrapper
ただし、FileDescriptor の宣言から最後の Catch ステートメントまでの同じコードは、通常の空のアクティビティの OnCreate で完全に機能します。ここでは機能していません。
これに対する解決策はありますか?
どうにかして getAssets() メソッドを静的にすることはできますか?
Fragment から音声ファイルにアクセスする他の方法はありますか?
(覚えておいてください、私の目標は、異なるタブの各画面で異なるオーディオ ファイルを再生することです。後でさらにオーディオ ファイルを追加します。少なくともこれを最初に機能させようとしています。)
助けてください:)
ありがとうございました !