Afficher le PDF dans Android

Dans mon onCreate() je fais cette case:

//
//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();
}

Sur mon HTC Desire, ce n'est pas le retour d'un match, même si j'ai Adobe PDF viewer. Une réponse à cette question android: ouvrir un fichier pdf à partir de mon application en utilisant le haut de la visionneuse pdf mentionne que Adobe ne peut pas avoir tout public Intentions, de sorte que la vérification ci-dessus sera évidemment de retour rien.

Quelqu'un peut-il vérifier si vous devriez être en mesure de lancer Acrobat à partir d'une intention, ou est-il une autre méthode ou d'une visionneuse PDF pour l'utiliser.

Le réel de cas d'utilisation est de télécharger des copies de factures et de les stocker sur le stockage local, à l'aide d'un code tel que:

 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();

et puis pour montrer

//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);

OriginalL'auteur BJB | 2010-09-14