Android:在recyclerview中使用mediaplayer

标签 android android-recyclerview android-mediaplayer

我想在回收站 View 的每个项目中使用媒体播放器。我想在特定项目显示时立即播放音频。

我正在尝试:

public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int i) {
vhplaymusic = (PersonViewHolderplaymusic) viewHolder;
mp = MediaPlayer.create(viewHolder.itemView.getContext(), Uri.parse(context.getExternalFilesDir("krishna").getPath() + "/amalharinaam_finalcut_loud.mp3"));
mp.start();
}

在尝试运行时,它说 mp 为 null。

错误日志:

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.simha.sacredindaapp, PID: 29281
E/AndroidRuntime: java.lang.NullPointerException
E/AndroidRuntime:     at com.simha.yatras.Myplanshowrvadapter.onBindViewHolder(Myplanshowrvadapter.java:410)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:5217)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:5250)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4487)
E/AndroidRuntime:     at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4363)

最佳答案

要创建一个新的 MediaPlayer,您应该按以下方式进行:

MediaPlayer mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.setDataSource(context.getExternalFilesDir("krishna").getPath() + "/amalharinaam_finalcut_loud.mp3"));
mPlayer.prepareAsync();

使用 prepareAsync() 您不会在加载音频时阻塞应用程序,因此我们需要一个回调方法来在加载音频后重现音频:

mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                        @Override
                        public void onPrepared(MediaPlayer mPlayer) {
                            Common.dismissLoading(progressDialog);
                            if (mPlayer != null) {
                                mPlayer.start();
                            }
                        }
                    });

之后,您可以使用 mPlayer.start();mPlayer.pause(); 处理暂停和恢复;最后,当您不再需要音频时 mPlayer.release();

关于Android:在recyclerview中使用mediaplayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37639627/

相关文章:

c# - Xamarin 安卓 : What is the correct way to Marshal a string from C# to a Unicode string in C++?

android - 使用 Vitamio 库流式传输 m3u8

android - 房间数据库 onConflict = OnConflictStrategy.REPLACE 不起作用

java - 聊天应用程序中的反向分页不起作用

android - 在 Android 11 (R) 上获取专辑封面

android - 媒体播放器和对话框

android - 如何获取音频文件的 channel 数

android - 有没有办法动态更改 compose 的 Text() 中的字符串?

java - 如何更改 RecyclerView 中所有项目的布局?

android - 在 Recycler GridLayoutManager 中的 3 行和 4 行项目之间提供更多间距