gpt4 book ai didi

android - 无法对非静态方法 getAssets() 进行静态引用 - 在 fragment 中播放音频时遇到问题

转载 作者:太空狗 更新时间:2023-10-29 15:53:58 25 4
gpt4 key购买 nike

所以,我正在制作一个带有可滚动标签 + 滑动导航的应用。在每个选项卡的页面中,我想播放不同的音频文件。

下面是我的 fragment 的 OnCreateView,包含媒体播放器的初始化、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 语句的同一段代码在正常的空白 Activity 的 OnCreate 中工作得很好。它在这里不起作用。

有什么解决方案吗?

我能否以某种方式使 getAssets() 方法静态化?

还有其他方法可以从 Fragment 访问音频文件吗?

(请记住,我的目标是在每个不同选项卡的屏幕中播放不同的音频文件。我稍后会添加更多音频文件,只是试图让至少这个文件先工作。)

请帮助:)

谢谢!

最佳答案

您需要使用 Context 对象,因此在此示例中您可以使用:

rootView.getContext().getAssets().openFd("a.mp3");

也就是说,我建议在实例化 View 层次结构之后,将这段代码移到 onActivityCreatedonStart 的 fragment 生命周期中。将此代码放在 onCreateView 中可能会延迟/减慢向用户显示 UI 的速度。

从那些后来的生命周期方法中,您可以安全地调用: getResources().getAssets().openFd("a.mp3");

关于android - 无法对非静态方法 getAssets() 进行静态引用 - 在 fragment 中播放音频时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18209635/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com