Reputation: 175
i found this answer https://stackoverflow.com/a/10689094/11520105 ,and i tried this code ,it pops up dialog to select pdfviewer and when i tap Adobe reader then it simply just launches adobe reader but doesn't launch pdf file
code snippet
pdflistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
UploadPDF uploadPDF = list.get(position);
String url = uploadPDF.getUrl();
Log.i("url",url);
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse(url));
intent.setType("application/pdf");
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(intent, 0);
if (activities.size() > 0) {
startActivity(intent);
} else {
// Do something else here. Maybe pop up a Dialog or Toast
Toast.makeText(ShowPdfActivity.this, "Can't open pdf", Toast.LENGTH_SHORT).show();
}
logCat
2020-01-01 18:05:56.259 15148-15148/com.tarandeepsingh.inventory V/FA: onActivityCreated
2020-01-01 18:05:56.306 15148-15186/com.tarandeepsingh.inventory V/FA: Activity resumed, time: 2896415632
2020-01-01 18:05:56.320 15148-15186/com.tarandeepsingh.inventory D/FA: Logging event (FE): screen_view(_vs), Bundle[{ga_event_origin(_o)=auto, ga_previous_class(_pc)=MainActivity, ga_previous_id(_pi)=3485492302754114157, ga_screen_class(_sc)=ShowPdfActivity, ga_screen_id(_si)=3485492302754114159}]
2020-01-01 18:05:57.157 15148-15148/com.tarandeepsingh.inventory I/url: https://firebasestorage.googleapis.com/v0/b/inventory-b98d3.appspot.com/o/uploads%2F1577868311721.pdf?alt=media&token=e543f039-38bd-4881-bcff-48b533ff22bf
2020-01-01 18:05:57.165 15148-15148/com.tarandeepsingh.inventory I/Timeline: Timeline: Activity_launch_request time:644743239 intent:Intent { act=android.intent.action.VIEW typ=application/pdf }
2020-01-01 18:05:57.200 15148-15186/com.tarandeepsingh.inventory V/FA: Screen exposed for less than 1000 ms. Event not sent. time: 889
2020-01-01 18:05:57.207 15148-15186/com.tarandeepsingh.inventory V/FA: Activity paused, time: 2896416520
2020-01-01 18:05:59.218 15148-15186/com.tarandeepsingh.inventory D/FA: Application going to the background
2020-01-01 18:05:59.235 15148-15186/com.tarandeepsingh.inventory D/FA: Logging event (FE): app_background(_ab), Bundle[{ga_event_origin(_o)
as you can see in logcat , i am getting url but unable to launch default/already installed pdf viewer
thanks
Upvotes: 0
Views: 2003
Reputation: 175
I need to download file to open it , i can't open it in inbuilt/default pdfviewer using uri
String url = "given";
DownloadManager downloadmanager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
request.setTitle(name);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
DownloadManager.Request.NETWORK_MOBILE);
request.setAllowedOverRoaming(false);
request.setDescription("Downloading");
request.allowScanningByMediaScanner();
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,name);
request.setMimeType(".pdf");
id = downloadmanager.enqueue(request);
using downloadManager is better way, so i used it
Upvotes: 0
Reputation: 4337
To handle your needs, you need to download the PDF and store it into the device storage, so you can use it as you want using their path.
Here's a full example of how to download a PDF file and open it when the download is finished :
String PDF_URL = "https://perso.univ-rennes1.fr/pierre.nerzic/Android/poly.pdf";
@SuppressLint("StaticFieldLeak")
private class DownloadFile extends AsyncTask<String, Integer, String> {
String savedFilePath = null;
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
//To ignore the file URI exposure.
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
progressDialog = new ProgressDialog(PickLocationActivity.this);
progressDialog.setTitle("Downloading PDF");
progressDialog.setMessage("Please wait (0%)");
progressDialog.show();
}
@Override
protected String doInBackground(String... urlParams) {
int count;
String fileName = urlParams[1] + ".pdf";
File storageDir = new File(
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
+ "/PDF_FOLDER/");
boolean success = true;
if (!storageDir.exists()) {
success = storageDir.mkdirs();
}
if (success) {
File file = new File(storageDir, fileName);
savedFilePath = file.getAbsolutePath();
if (!file.exists()) {
try {
URL url = new URL(urlParams[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(file);
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress((int) (total * 100 / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return savedFilePath;
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progressDialog.setMessage("Please wait (" + values[0] + "%)");
}
@Override
protected void onPostExecute(String pdfPath) {
super.onPostExecute(pdfPath);
if (pdfPath != null && !pdfPath.isEmpty()) {
File pdfFile = new File(pdfPath);
if (pdfFile.exists()) {
progressDialog.dismiss();
Uri path = Uri.fromFile(pdfFile);
Intent Go = new Intent(Intent.ACTION_VIEW);
Go.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
Go.setDataAndType(path, "application/pdf");
Go.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(Go);
}
}
}
}
call it like this : new DownloadFile().execute(PDF_URL, "PDF_NAME");
don't forget to add INTERNET
, READ_EXTERNAL_STORAGE
and WRITE_EXTERNAL_STORAGE
permissions on your AndroidManifest.xml
Otherwise, you can use this library PdfViewPager and go to Remote PDF's from a URL, it's doing the same thing (downloading PDF file into your device storage first)
Upvotes: 2