In this article, we are going to see how we can implement a PDF picker in android studio and get the Uri and Path of the pdf. In this application, we will take permission from the user to Read External Storage and then show the Uri and path of the selected PDF to the user showing that we have successfully picked the PDF. Here is a sample video of what we are going to build in this application. Note that we are going to implement this application using Java language.
Step by Step Implementation
Step 1: Create a New Project
- Open a new project.
- We will be working on Empty Activity with language as Java. Leave all other options unchanged.
- You can change the name of the project at your convenience.
- There will be two default files named activity_main.xml and MainActivity.java.
If you don’t know how to create a new project in Android Studio then you can refer to How to Create/Start a New Project in Android Studio?Â
Step 2: Adding storage permission
Follow the path app > manifests > AndroidManifest.xml and paste the following piece of code in it.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Step 3: Working on XML files
Navigate to the app > res > layout > activity_main.xml and add the below code to that file. Below is the code for the activity_main.xml file.
XML
<?xml version="1.0" encoding="utf-8"?><LinearLayout    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:gravity="center"    android:padding="16dp"    tools:context=".MainActivity">      <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/bt_select"        android:text="Select PDF"/>        <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/tv_uri"        android:textSize="18sp"        android:textAlignment="center"        android:layout_marginTop="16dp"/>        <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/tv_path"        android:textSize="18sp"        android:textAlignment="center"        android:layout_marginTop="32dp"/>  </LinearLayout> |
Step 4: Working on java files
Go to the MainActivity.java file and refer to the following code. Below is the code for the MainActivity.java file. Comments are added inside the code to understand the code in more detail
Java
package com.example.pdfpicker;  import android.Manifest;import android.content.Intent;import android.content.pm.PackageManager;import android.net.Uri;import android.os.Bundle;import android.text.Html;import android.view.View;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;import androidx.activity.result.ActivityResult;import androidx.activity.result.ActivityResultCallback;import androidx.activity.result.ActivityResultLauncher;import androidx.activity.result.contract.ActivityResultContracts;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import androidx.core.app.ActivityCompat;  public class MainActivity extends AppCompatActivity {      // Initialize variable    Button btSelect;    TextView tvUri, tvPath;    ActivityResultLauncher<Intent> resultLauncher;      @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);          // assign variable        btSelect = findViewById(R.id.bt_select);        tvUri = findViewById(R.id.tv_uri);        tvPath = findViewById(R.id.tv_path);          // Initialize result launcher        resultLauncher = registerForActivityResult(            new ActivityResultContracts                .StartActivityForResult(),            new ActivityResultCallback<ActivityResult>() {                @Override                public void onActivityResult(                    ActivityResult result)                {                    // Initialize result data                    Intent data = result.getData();                    // check condition                    if (data != null) {                        // When data is not equal to empty                        // Get PDf uri                        Uri sUri = data.getData();                        // set Uri on text view                        tvUri.setText(Html.fromHtml(                            "<big><b>PDF Uri</b></big><br>"                            + sUri));                          // Get PDF path                        String sPath = sUri.getPath();                        // Set path on text view                        tvPath.setText(Html.fromHtml(                            "<big><b>PDF Path</b></big><br>"                            + sPath));                    }                }            });          // Set click listener on button        btSelect.setOnClickListener(            new View.OnClickListener() {                @Override public void onClick(View v)                {                    // check condition                    if (ActivityCompat.checkSelfPermission(                            MainActivity.this,                            Manifest.permission                                .READ_EXTERNAL_STORAGE)                        != PackageManager                               .PERMISSION_GRANTED) {                        // When permission is not granted                        // Result permission                        ActivityCompat.requestPermissions(                            MainActivity.this,                            new String[] {                                Manifest.permission                                    .READ_EXTERNAL_STORAGE },                            1);                    }                    else {                        // When permission is granted                        // Create method                        selectPDF();                    }                }            });    }      private void selectPDF()    {        // Initialize intent        Intent intent            = new Intent(Intent.ACTION_GET_CONTENT);        // set type        intent.setType("application/pdf");        // Launch intent        resultLauncher.launch(intent);    }      @Override    public void onRequestPermissionsResult(        int requestCode, @NonNull String[] permissions,        @NonNull int[] grantResults)    {        super.onRequestPermissionsResult(            requestCode, permissions, grantResults);          // check condition        if (requestCode == 1 && grantResults.length > 0            && grantResults[0]                   == PackageManager.PERMISSION_GRANTED) {            // When permission is granted            // Call method            selectPDF();        }        else {            // When permission is denied            // Display toast            Toast                .makeText(getApplicationContext(),                          "Permission Denied",                          Toast.LENGTH_SHORT)                .show();        }    }} |
Here is the final output of our application.
Output:Â
