Skip to content Skip to sidebar Skip to footer

Open Files (pdf , Mp3 , Mp4 , ...) When Clicking On The Recyclerview

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 Recy

Solution 1:

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

// ===========================  ViewHolder ==========================publicclassViewHolderextendsRecyclerView.ViewHolder implementsView.OnClickListener {
        private TextView txtTitle;
        private ImageView imgDelete;

        publicViewHolder(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);
        }

        @OverridepublicvoidonClick(View v) {

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


        }
    }

And This is the Helper class for handling all formats :

publicclassFileOpen {

    publicstaticvoidopenFile(Context context, File url)throws IOException {
        // Create URI
        File file=url;
        Uriuri= Uri.fromFile(file);

        Intentintent=newIntent(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 fileif (url.toString().contains(".doc") || url.toString().contains(".docx")) {
            // Word document
            intent.setDataAndType(uri, "application/msword");
        } elseif(url.toString().contains(".pdf")) {
            // PDF file
            intent.setDataAndType(uri, "application/pdf");
        } elseif(url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
            // Powerpoint file
            intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
        } elseif(url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
            // Excel file
            intent.setDataAndType(uri, "application/vnd.ms-excel");
        } elseif(url.toString().contains(".zip") || url.toString().contains(".rar")) {
            // WAV audio file
            intent.setDataAndType(uri, "application/x-wav");
        } elseif(url.toString().contains(".rtf")) {
            // RTF file
            intent.setDataAndType(uri, "application/rtf");
        } elseif(url.toString().contains(".wav") || url.toString().contains(".mp3")) {
            // WAV audio file
            intent.setDataAndType(uri, "audio/x-wav");
        } elseif(url.toString().contains(".gif")) {
            // GIF file
            intent.setDataAndType(uri, "image/gif");
        } elseif(url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
            // JPG file
            intent.setDataAndType(uri, "image/jpeg");
        } elseif(url.toString().contains(".txt")) {
            // Text file
            intent.setDataAndType(uri, "text/plain");
        } elseif(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);
    }
}

Solution 2:

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

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

     // for mp3 file

         file = newFile ("/mnt/sdcard/test.mp3");
         Intentintent=newIntent(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

Post a Comment for "Open Files (pdf , Mp3 , Mp4 , ...) When Clicking On The Recyclerview"