The document viewer can be used by third party applications. These applications can launch the document viewer application directly and pass in a document or image to view. In order to launch a document the application passes the location of the file they wish to open. This document must be saved locally on the device
Applications broadcast Intent.ACTION_VIEW with the file’s URI and Mime type.
File document = new File(Environment.getExternalStorageDirectory(), "document.pdf"); String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( MimeTypeMap.getFileExtensionFromUrl(document.toURI().toString())); if (mimeType != null) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setDataAndType(Uri.fromFile(document), mimeType); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } startActivity(intent)
IMPORTANT: For compatibility with HMT-1 Release 10 and above, you need to implement a FileProvider to handle URI creation instead of Uri.fromFile().
The FileProvider must be specified in the AndroidManifest.xml file, with the following attributes:
<provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider>
As the directories used by the FileProvider must be specified beforehand, one or more child elements of the <paths> element should be added to the res/xml/file_paths.xml file.
<paths> <external-files-path name="my_documents" path="Documents" /> </paths>
This path component must correspond to the path used to create the output file in the java code. In this case the File that corresponds is the following:
final File mediaStorageDir = getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS);
Finally, to invoke the camera intent, the URI is given by the FileProvider and passed into the intent.
File document = new File(mediaStorageDir, "document.pdf"); String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( MimeTypeMap.getFileExtensionFromUrl(document.toURI().toString())); final Uri contentUri = FileProvider.getUriForFile( getApplicationContext(), getApplicationContext().getPackageName() + ".fileprovider", document); if(mimeType != null){ final Intent viewIntent = new Intent(Intent.ACTION_VIEW); viewIntent.addCategory(Intent.CATEGORY_DEFAULT); viewIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); viewIntent.setDataAndType(contentUri, mimeType); viewIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(viewIntent); }
There are a few additional Extras you can include with your View intent to customize the user experience upon launching the DocumentViewer:
Key | Argument Type | Description |
---|---|---|
‘page’ | int | Use to specify which page to open first. Default: 1 |
‘zoom’ | int | Use to specify which zoom level should be active upon opening document. Default: 1 |