android - 在回收器适配器中设置 clicklistener 以从 firebase 下载视频
问题描述
我想在回收器适配器中设置一个按钮,该按钮从 firebase 获取视频,以便用户可以从 firebase 将视频下载到他的手机中。下面是我的 firebase 适配器代码,我用它来感染来自 firebase 的视频。我还尝试了来自 stackoverflow 的各种代码,但我不知道为什么我的突然崩溃并给我未知的错误。我收到错误消息-“用户 10388 和当前进程都没有 android.permission.WRITE_EXTERNAL_STORAGE。”。我已在我的清单文件中授予所有读写存储权限。
public class VideosAdapter extends FirebaseRecyclerAdapter<VideoItem , VideosAdapter.myViewHolder> {
ImageButton download; <------ Button to download video
ImageButton share; <------ Button for sharing video on other social media platforms
public VideosAdapter(@NonNull FirebaseRecyclerOptions<VideoItem> options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull myViewHolder holder, int position, @NonNull VideoItem model) {
holder.setdata(model);
download.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(model.videoUrl));
request.setDescription("download");
request.setTitle(""+model.videoTitle);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
}
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, ""+model.videoTitle+".mp4");
DownloadManager manager = (DownloadManager) v.getContext().getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
});
}
@NonNull
@Override
public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_container_video, parent, false);
download = view.findViewById(R.id.download); <------ i want to set clicklistener on this
button to download video.
share = view.findViewById(R.id.vidshare);
return new myViewHolder(view);
}
class myViewHolder extends RecyclerView.ViewHolder{
VideoView videoView;
TextView videoTitle;
public myViewHolder(@NonNull View itemView) {
super(itemView);
videoView = itemView.findViewById(R.id.videoview); <---- Displaying my videos in video view
videoTitle = itemView.findViewById(R.id.textVideoTitle);
}
void setdata(VideoItem obj){
videoView.setVideoPath(obj.videoUrl); <---- accessing the url of my video
videoTitle.setText(obj.videoTitle);
videoView.setOnPreparedListener(mp -> {
mp.start();
});
videoView.setOnCompletionListener(MediaPlayer::start);
}
}
}
以上是我的 Firebase 适配器代码。我正在使用此适配器将视频从 firebase 获取到回收器视图并将其显示给用户。我想设置类似 TikTok 应用程序中的按钮来共享和下载视频。
我已经通过 youtube 教程完成了所有这些工作。他只告诉了如何在 recyclerview 中从 firebase 获取视频,但他没有告诉如何设置按钮。