open files (pdf , mp3 , mp4 , …) when Clicking on the recyclerView

早过忘川 提交于 2020-07-09 20:12:36

问题


I have a RecyclerView that shows the list of files exist in the app directory . Now, when user click on a particular row , that file will open.

This is the Screenshot of my RecyclerView :

This is The viewHolder of my Adapter code :

// ===========================  ViewHolder ==========================

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView txtTitle;
        private ImageView imgDelete;

        public ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            txtTitle = (TextView) itemView.findViewById(R.id.txt_file_title);
            imgDelete = (ImageView) itemView.findViewById(R.id.img_delete_row_show);
        }

        @Override
        public void onClick(View v) {
            Toast.makeText(v.getContext(), txtTitle.getText(), Toast.LENGTH_SHORT).show();
            //?????
        }
    }

回答1:


This is the Best Solution for this work , (Source)

// ===========================  ViewHolder ==========================
    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        private TextView txtTitle;
        private ImageView imgDelete;

        public ViewHolder(View itemView) {
            super(itemView);
            itemView.setOnClickListener(this);
            txtTitle = (TextView) itemView.findViewById(R.id.txt_file_title);
            imgDelete = (ImageView) itemView.findViewById(R.id.img_delete_row_show);
        }

        @Override
        public void onClick(View v) {

            String selectedFilePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Android/data/my.package.name/files/downloaded/" + txtTitle.getText().toString();
            File file = new File(selectedFilePath);
            try {
                FileOpen.openFile(v.getContext(),file);
            } catch (IOException e) {
                e.printStackTrace();
            }


        }
    }

And This is the Helper class for handling all formats :

public class FileOpen {

    public static void openFile(Context context, File url) throws IOException {
        // Create URI
        File file=url;
        Uri uri = Uri.fromFile(file);

        Intent intent = new Intent(Intent.ACTION_VIEW);
        // Check what kind of file you are trying to open, by comparing the url with extensions.
        // When the if condition is matched, plugin sets the correct intent (mime) type,
        // so Android knew what application to use to open the file
        if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
            // Word document
            intent.setDataAndType(uri, "application/msword");
        } else if(url.toString().contains(".pdf")) {
            // PDF file
            intent.setDataAndType(uri, "application/pdf");
        } else if(url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
            // Powerpoint file
            intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
        } else if(url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
            // Excel file
            intent.setDataAndType(uri, "application/vnd.ms-excel");
        } else if(url.toString().contains(".zip") || url.toString().contains(".rar")) {
            // WAV audio file
            intent.setDataAndType(uri, "application/x-wav");
        } else if(url.toString().contains(".rtf")) {
            // RTF file
            intent.setDataAndType(uri, "application/rtf");
        } else if(url.toString().contains(".wav") || url.toString().contains(".mp3")) {
            // WAV audio file
            intent.setDataAndType(uri, "audio/x-wav");
        } else if(url.toString().contains(".gif")) {
            // GIF file
            intent.setDataAndType(uri, "image/gif");
        } else if(url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
            // JPG file
            intent.setDataAndType(uri, "image/jpeg");
        } else if(url.toString().contains(".txt")) {
            // Text file
            intent.setDataAndType(uri, "text/plain");
        } else if(url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) {
            // Video files
            intent.setDataAndType(uri, "video/*");
        } else {
            //if you want you can also define the intent type for any other file

            //additionally use else clause below, to manage other unknown extensions
            //in this case, Android will show all applications installed on the device
            //so you can choose which application to use
            intent.setDataAndType(uri, "*/*");
        }

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }
}



回答2:


You need to use the following code inside your onClick(View v) method

       //For pdf file
         file = new File ("/mnt/sdcard/test.pdf");
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setDataAndType(path, "application/pdf");
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         startActivity(intent);

     // for mp3 file

         file = new File ("/mnt/sdcard/test.mp3");
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setDataAndType(path,  "audio/*");
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         startActivity(intent);

Set the path of the file in the file object and put up the appropriate MIME type as the second parameter to the intent.setDataAndType() method and you are good to go



来源:https://stackoverflow.com/questions/37508109/open-files-pdf-mp3-mp4-when-clicking-on-the-recyclerview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!