He estado probando esto y he encontrado que lo siguiente funciona. En primer lugar de descargar el archivo de forma independiente y lo almacena en el dispositivo y luego vas hacer esto:
File file = new File("/sdcard/download/somepdf.pdf");
PackageManager packageManager = getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType("application/pdf");
List list = packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY);
if (list.size() > 0 && file.isFile()) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
startActivity(intent);
He probado esto en varios emulador y un teléfono de cianógeno arraigada, así como un HTC Magic. Si no hay un procesador de PDF disponible, la lista devolverá cero y no pasará nada.
Parece importante establecer el tipo de datos en el tipo mimo de pdf para obtener el comportamiento correcto.
Si, por ejemplo, instalar droidreader reaccionará a la intención y mostrará el pdf.
Por supuesto, usted puede hacer el control antes de descargar el pdf, dependiendo de su caso de uso, o hacer cosas como mostrar alertas o redirigir otros intentos de descarga o lo que sea.
Editar: Tengo desde refactorizado esto en un método separado ..
public static final String MIME_TYPE_PDF = "application/pdf";
/**
* Check if the supplied context can render PDF files via some installed application that reacts to a intent
* with the pdf mime type and viewing action.
*
* @param context
* @return
*/
public static boolean canDisplayPdf(Context context) {
PackageManager packageManager = context.getPackageManager();
Intent testIntent = new Intent(Intent.ACTION_VIEW);
testIntent.setType(MIME_TYPE_PDF);
if (packageManager.queryIntentActivities(testIntent, PackageManager.MATCH_DEFAULT_ONLY).size() > 0) {
return true;
} else {
return false;
}
}
Mi HTC Hero vino preinstalado con QuickOffice espectador y el propio visor de PDF de HTC. – adrianbanks