Although this was answered, I wanted to share my decision, because, in my opinion, it is a little easier to include.
Using:
new OpenLocalPDF(context, 'nameOfPDFStoredInAssets').execute()
And here is the OpenLocalPDF class:
public class OpenLocalPDF { private static String TAG = OpenLocalPDF.class.getSimpleName(); private WeakReference<Context> contextWeakReference; private String fileName; public OpenLocalPDF(Context context, String fileName) { this.contextWeakReference = new WeakReference<>(context); this.fileName = fileName.endsWith("pdf") ? fileName : fileName + ".pdf"; } public void execute() { Context context = contextWeakReference.get(); if (context != null) { new CopyFileAsyncTask().execute(); } } private class CopyFileAsyncTask extends AsyncTask<Void, Void, File> { final String appDirectoryName = BuildConfig.APPLICATION_ID; final File fileRoot = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOCUMENTS), appDirectoryName); @Override protected File doInBackground(Void... params) { Context context = contextWeakReference.get(); AssetManager assetManager = context.getAssets(); File file = new File(fileRoot, fileName); InputStream in = null; OutputStream out = null; try { file.mkdirs(); if (file.exists()) { file.delete(); } file.createNewFile(); in = assetManager.open(fileName); Log.d(TAG, "In"); out = new FileOutputStream(file); Log.d(TAG, "Out"); Log.d(TAG, "Copy file"); copyFile(in, out); Log.d(TAG, "Close"); in.close(); out.flush(); out.close(); return file; } catch (Exception e) { Log.e(TAG, e.getMessage()); } return null; } private void copyFile(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int read; while ((read = in.read(buffer)) != -1) { out.write(buffer, 0, read); } } @Override protected void onPostExecute(File file) { super.onPostExecute(file); Context context = contextWeakReference.get(); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType( Uri.fromFile(file), "application/pdf"); context.startActivity(intent); } } }
add this permission to Manifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
cYrixmorten Dec 18 '16 at 20:47 2016-12-18 20:47
source share