C'était ma question initiale:
Je veux pouvoir ouvrir un fichier pdf dans mon application en utilisant l'Android intégré dans visionneuse pdf, mais je ne sais pas comment lancer d'autres applications. Je suis sûr que je dois appelez l'activité de démarrage, je ne sais tout simplement pas. comment identifier l'ouverture de l'application et comment passer le fichier à ce spécifique app.
Quelqu'un a un indice?
Je viens d'apprendre que le lecteur de pdf que j'ai sur mon téléphone est en fait fabriqué par HTC et que Adobe vient tout juste de sortir son lecteur de PDF Android (ce qui est génial). La nouvelle question est donc la suivante: comment puis-je vérifier que l'utilisateur a installé la visionneuse d'Adobe, puis comment puis-je ouvrir le fichier dans cette application à partir de mon application?
D'après les informations dont je dispose, Adobe n'a documenté aucune Intents
publique qu'il souhaite que les développeurs utilisent.
Vous pouvez essayer une ACTION_VIEW
Intent
avec une Uri
pointant sur le fichier (sur la carte SD ou MODE_WORLD_READABLE
dans votre magasin de fichiers local) et un type MIME de "application/pdf"
.
Vous pouvez déterminer par programme si une application appropriée existe sur le périphérique de l'utilisateur, sans intercepter les exceptions.
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("path-to-document"));
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
}
private void loadDocInReader(String doc)
throws ActivityNotFoundException, Exception {
try {
Intent intent = new Intent();
intent.setPackage("com.Adobe.reader");
intent.setDataAndType(Uri.parse(doc), "application/pdf");
startActivity(intent);
} catch (ActivityNotFoundException activityNotFoundException) {
activityNotFoundException.printStackTrace();
throw activityNotFoundException;
} catch (Exception otherException) {
otherException.printStackTrace();
throw otherException;
}
}
FileFinalpath = SdCardpath + "/" + Filepath + Filename;
File file = new File(FileFinalpath);
if (file.exists()) {
Uri filepath = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(filepath, "application/pdf");
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
startActivity(intent);
} catch (Exception e) {
alert.showAlertDialog(PDF_Activity.this, "File Not Started...","File Not Started From SdCard ", false);
Log.e("error", "" + e);
}
} else {
alert.showAlertDialog(PDF_Activity.this, "File Not Found...","File Not Found From SdCard ", false);
}
Bien qu'il s'agisse d'un sujet assez ancien, voici une solution pour ouvrir un PDF qui se trouve dans l'actif/dossier avec une application de lecture PDF externe. Il utilise un fournisseur de contenu personnalisé: https://github.com/commonsguy/cwac-provider
Grâce à cela, vous pouvez définir n’importe quel fichier à fournir à partir du dossier assets/ou res/raw /.
Essayez le! La solution la meilleure et la plus simple que j'ai trouvée jusqu'à présent.
Android a un cadre intégré à partir d'Android 5.0/Lollipop, il s'appelle PDFRenderer . Si vous pouvez supposer que vos utilisateurs disposent d’Android 5.0, c’est probablement la meilleure solution.
Il existe un exemple officiel sur le site de développement de Google:
http://developer.Android.com/samples/PdfRendererBasic/index.html
Il ne prend pas en charge les annotations ni d’autres fonctionnalités plus avancées; pour ceux que vous êtes vraiment de retour soit en utilisant une intention d'ouvrir une application complète, soit en incorporant un SDK tel que mupdf .
(Avertissement: je travaille très occasionnellement sur mupdf.)
J'étais également confronté au même problème lorsque j'essayais d'afficher PDF sur un périphérique Android et que je finissais par obtenir la solution (intégration de librairie tierce PDF)
https://github.com/JoanZapata/Android-pdfview
alors que j'ai testé plusieurs bibliothèques pour cela énumérés ci-dessous qui fonctionnent également,
https://github.com/jblough/Android-Pdf-Viewer-Library
& mupdf qui vient avec la version ndk ( https://code.google.com/p/mupdf/downloads/detail?name=mupdf-1.2-source.Zip&can=2&q= ) et doit extraire avec NDK puis utilisez-le dans une application comme un pot ou en Java, etc. Un bel article explique l’utilisation de cette bibliothèque @ http://dixitpatel.com/integrating-pdf-in-Android-application/
Ajouter FLAG_GRANT_READ_URI_PERMISSION
Intent intent = new Intent(Intent.ACTION_VIEW)
Uri outputFileUri = FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", file);
intent.setDataAndType(outputFileUri, "application/pdf");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent in = Intent.createChooser(intent, "Open File");
startActivity(in);
ajoutez également provider_paths.xml à res -> xml folder .__ et devez ajouter le code ci-dessous à manifestes.
<application>
<provider
Android:name="Android.support.v4.content.FileProvider"
Android:authorities="${applicationId}.provider"
Android:exported="false"
Android:grantUriPermissions="true"
tools:replace="Android:authorities">
<meta-data
tools:replace="Android:resource"
Android:name="Android.support.FILE_PROVIDER_PATHS"
Android:resource="@xml/provider_paths" />
</provider>
</application>