In this Example we will see how to view
a pdf file through an android app. Here we will open the pdf file
saved in the SD card with an application to view the pdf file like
the Adobe Reader , Quick Office or any other application capable of
reading pdf files.
In this application on tapping a button
we check for the existence of the pdf file in the SD card. If the
file exists we call the reader application via Intents. In the due
course if the reader application is not found it is notified by
catching the exception ActivityNotFoundException.
So
lets start:
1.Create
an Android Application Project with any Project Name and Package
Name. Create an Activity and Layout file for the same like
MainActivity & activity_main.
2.Design
the screen for the activity with a button as below
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".Vibrator" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:layout_marginTop="124dp" android:text="Welcome to AndroidBite !!!" android:textColor="@android:color/black" android:textSize="20sp" /> <Button android:id="@+id/bPressMe" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="Press Me !!!" /> </RelativeLayout>
3.Now in the activity, we create a File instance and construct it using specified directory and name. Then we set the Uri from the file instance and start the intent Intent.ACTION_VIEW . This intents data is set with the uri and the MIME Type for pdf is set as application/pdf before calling the intent.
MainActivity.java:
import java.io.File; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.bPressMe); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { File pdfFile = new File(Environment .getExternalStorageDirectory(), "Case Study.pdf"); try { if (pdfFile.exists()) { Uri path = Uri.fromFile(pdfFile); Intent objIntent = new Intent(Intent.ACTION_VIEW); objIntent.setDataAndType(path, "application/pdf"); objIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(objIntent); } else { Toast.makeText(MainActivity.this, "File NotFound", Toast.LENGTH_SHORT).show(); } } catch (ActivityNotFoundException e) { Toast.makeText(MainActivity.this, "No Viewer Application Found", Toast.LENGTH_SHORT) .show(); } catch (Exception e) { e.printStackTrace(); } } }); } }4.Include the
WRITE_EXTERNAL_STORAGE
permission
in the manifest file(permission for both reading and writing).
5.Run
the application by right clicking the project Run As->Android
Application. If everything goes well the output will be similar to
the one below
Output: