En mi onCreate() hago esta comprobación:Mostrar PDF en Android
//
// check if we have a PDF viewer, else bad things happen
//
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setType("application/pdf");
List<ResolveInfo> intents = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if (intents == null || intents.size() == 0) {
// display message then...
finish();
}
En mi HTC Desire, esto no devolver un partido, a pesar de que tengo visor de PDF de Adobe. Una respuesta a esta pregunta android: open a pdf from my app using the built in pdf viewer menciona que Adobe puede no tener ningún Intento público, por lo que la verificación anterior obviamente no arrojará nada.
¿Alguien puede verificar si puede iniciar Acrobat desde un intento, o hay algún otro método o visor de PDF para usar?
El caso de uso real está descargando copias de las facturas y almacenarlos en el almacenamiento local utilizando un código como:
URL url = new URL(data);
InputStream myInput = url.openConnection().getInputStream();
FileOutputStream fos = openFileOutput(fname, Context.MODE_WORLD_READABLE);
// transfer bytes from the input file to the output file
byte[] buffer = new byte[8192];
int length;
while ((length = myInput.read(buffer)) > 0) {
fos.write(buffer, 0, length);
progressDialog.setProgress(i++);
}
fos.close();
y luego para mostrar
// read from disk, and call intent
openFileInput(fname); // will throw FileNotFoundException
File dir = getFilesDir(); // where files are stored
File file = new File(dir, fname); // new file with our name
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromFile(file));
intent.setType("application/pdf");
startActivity(intent);
Gracias - buena idea – BJB