首页 > 解决方案 > 在回收器适配器中设置 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 获取视频,但他没有告诉如何设置按钮。

标签: androidfirebase-realtime-databaseandroid-recyclerview

解决方案


推荐阅读