How to Read PDF in Android stored in SDCard ??
Here's some code showing how to open a pdf file to read:
private void openBook() {
File file = new File(mRealPath);
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setDataAndType(path, getString(R.string.application_type));
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(FirstTab.this,
getString(R.string.no_application_found),
Toast.LENGTH_SHORT).show();
}
}
Related
I have an app where on button click, access should be provided to browse and open the PDF files stored in the internal memory of the device.I tried various codes but i get an toast saying "Cannot display PDF". I don't get any errors in logs. I use android version 7.0 device. Attached my code below: please help:
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/example.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
I have included this in Oncreate:
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
This is how called the method:
linear_pdf.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
pdf.setTextColor(getActivity().getResources().getColor(R.color.colorWhite));
openPdf(getContext(), Environment.getExternalStorageDirectory().getAbsolutePath()+"/example.pdf");
communication.dismiss();
}
});
Try this one...
public void openPdf(Context context, String path){
File file = new File(path);
if (file.exists()) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "application/pdf");
PackageManager pm = context.getPackageManager();
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setType("application/pdf");
Intent openInChooser = Intent.createChooser(intent, "Choose");
List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0);
if (resInfo.size() > 0) {
try {
context.startActivity(openInChooser);
} catch (Throwable throwable) {
Toast.makeText(context, "PDF apps are not installed", Toast.LENGTH_SHORT).show();
// PDF apps are not installed
}
} else {
Toast.makeText(context, "PDF apps are not installed", Toast.LENGTH_SHORT).show();
}
}
}
Call this method:
openPdf(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath()+"/example.pdf");
For opening one specific file:
File pdfFile = new File(Environment.getExternalStorageDirectory() + "/your_directory/" + "your_file_name" + ".pdf");
Uri path = Uri.fromFile(pdfFile);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try{
startActivity(pdfIntent);
}catch(ActivityNotFoundException e){
Toast.makeText(getContext(), "No required app", Toast.LENGTH_SHORT).show();
}
Check directory, this one works.
For opening pdf file from local storage add prefix in url.
private void openPdf(File file) {
try {
String url = file.getAbsolutePath();
String u = "file:///" + url;
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(u));
startActivity(i);
} catch (Exception e) {
e.printStackTrace();
}
}
In my app I created a hidden text file using below code:
logfile = new File(Environment.getExternalStorageDirectory().toString()+ "/.logfile.txt");
if(!logfile.exists()){
try {
logfile.createNewFile();
//Toast.makeText(SimpleIME.this,"File created...",Toast.LENGTH_SHORT).show();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Toast.makeText(SimpleIME.this,"IOException : "+e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
This works fine. It creates a hidden file. And then again I want to open that text file when i press a button called viewlog.
Code for viewlog goes like this.
viewlog.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View arg0) {
logfile = new File(Environment.getExternalStorageDirectory().toString()+ "/.logfile.txt");
Uri uri = Uri.parse("file://" + logfile.getAbsolutePath());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent);
}
});
So when I run this app and when I click this viewlog button it force closes the app.
So how to fix this problem?
Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent
logfile = new File(Environment.getExternalStorageDirectory().toString()+ "/.logfile.txt");
Uri uri = Uri.parse("file://" + logfile.getAbsolutePath());
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "text/plain");
startActivity(intent);
I'm trying to open an XLSX file within my Android App.
I'm aware that the Intent type I have to fire is application/excel, but despite I've installed Google Sheets, my code says that no application can open my excel file.
This is the code I use to fire the Intent:
private void openXLS(){
File xls = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS), "prova.xlsx");
Uri path = Uri.fromFile(xls);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/excel");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
context.startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(context, "No Application available to view XLS", Toast.LENGTH_SHORT).show();
}
}
Note: prova.xlsx exists, and I'm able to reach it and open it.
SOLVED
Using the MIME type application/vnd.ms-excel, *.xls and *.xlsx files can be opened.
private void openXLS(final String path) {
File file = new File(path);
Uri uri ;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
uri = FileProvider.getUriForFile(context, context.getPackageName() + ".provider", file);
} else {
uri = Uri.fromFile(file);
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.setDataAndType(path, "application/vnd.ms-excel");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
startActivity(intent);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "Application not found", Toast.LENGTH_SHORT).show();
}
}
I try to open pdf, but when I press the button, nothing happens.
Where is my mistake?
OnClickListener oclBt2 = new OnClickListener(){
public void onClick(View v) {
File file = new File("http://testserv1.p.ht/1/ksu016.pdf");
if (file.exists()) {
Uri path = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
try {
startActivity(intent);
}
catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
}
};
I corrected my code, but it doesn't work again :( when I press the button, appears the window(Sorry, but my reputation doesn't allow to post images)
OnClickListener oclBt2 = new OnClickListener(){
public void onClick(View v) {
Uri path = Uri.parse("http://testserv1.p.ht/1/ksu016.pdf");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(path, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent);
}
catch (ActivityNotFoundException e) {
mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url=http://hostforandroid.elitno.net/pdf-test.pdf" );
setContentView(mWebView);
}
}
};
First, File is for local files, not http URLs. Use Uri.parse("http://testserv1.p.ht/1/ksu016.pdf"); to get a Uri pointing to an http URL.
Second, there may be no PDF viewers that are set up to directly download from an HTTP URL. For greater compatibility, you can arrange to download the PDF first (using DownloadManager or your own HTTP client code), then view the local PDF file.
Here is my button click code:
private View.OnClickListener onButton1=new View.OnClickListener() {
public void onClick(View v){
copyAssets();
File rootDir = Environment.getExternalStorageDirectory();
File file = new File(rootDir + "/sdcard/" +"save.pdf");
if(file.exists())
{
// do action here
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.setType("application/pdf");
startActivity(intent);
}
else {
Toast.makeText(getApplicationContext(), "File does not exist", Toast.LENGTH_LONG).show();
}
}
};
copyAssets() is a function by which I copy the file from my assets folder to my SD-Card and it is working as I checked on my device, but I am unable to open it when I click the button. My file is named as save.pdf on the SD-Card
you can read pdf file from SDCard by giving the path as follows:
File pdfFile = new File(path);
if(pdfFile.exists())
{
Uri path = Uri.fromFile(pdfFile);
Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
pdfIntent.setDataAndType(path, "application/pdf");
pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try
{
startActivity(pdfIntent);
}
catch(ActivityNotFoundException e)
{
Toast.makeText(uractivity.this, "File does not exist", Toast.LENGTH_LONG).show();
}
}