Android: aprire un pdf da mia app utilizzando il costruito nel visualizzatore PDF
-
04-10-2019 - |
Domanda
Questa era la mia domanda iniziale:
Voglio essere in grado di aprire un file pdf nella mia app utilizzando dell'androide costruiti in pdf viewer app, ma non so come avviare altre applicazioni. Sono sicuro che devo chiamata inizio attività, so solo Dont come identificare l'applicazione im apertura e come passare il file che specifica app.
Qualcuno ha un indizio?
Ho appena saputo che il visualizzatore di PDF che ho sul mio telefono è in realtà fatta da HTC e che Adobe appena pubblicato il loro visualizzatore di PDF Android (che è grande). Quindi la nuova domanda è questa: come faccio a verificare che l'utente ha installato viewer di Adobe, e poi come faccio ad aprire il file in quella app dalla app
Soluzione
Per quanto ne so, Adobe non ha documentato alcun Intents
pubblico che vuole agli sviluppatori di utilizzare.
Si può provare un ACTION_VIEW
Intent
con una punta Uri
al file (o sulla scheda SD o MODE_WORLD_READABLE
nel tuo negozio file app-locale) e un tipo MIME di "application/pdf"
.
Altri suggerimenti
È possibile programmazione determinare se un'applicazione adatta esiste sul dispositivo dell'utente, senza prendere eccezioni.
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);
}
Anche se questo è un argomento piuttosto vecchio, ecco una soluzione per l'apertura di un file PDF che si trova nella risorsa / cartella con un lettore di PDF esterno app. Esso utilizza un fornitore di contenuti su misura: https://github.com/commonsguy/cwac-provider
Con questo è possibile definire qualsiasi tipo di file che devono essere fornite dai beni / o res / cartella / crudo.
Da provare! soluzione migliore e più semplice che ho trovato finora.
Sono stato anche affrontato lo stesso problema quando stava cercando di visualizzazione PDF sul dispositivo Android e, infine, finire con la soluzione (3 ° integrazione biblioteca partito PDF)
https://github.com/JoanZapata/android-pdfview
mentre ho provato più librerie per questo di seguito elencati, che sono anche lavorando,
https://github.com/jblough/Android-Pdf-Viewer-Library
& MuPDF che viene fornito con il sapore NDK ( https://code.google.com/p/mupdf/downloads/detail?name=mupdf-1.2-source.zip&can=2&q= ) e necessità di estrarre con NDK e poi utilizzarlo in applicazione come un vaso o java ecc articolo bello per spiegare l'uso di questa libreria @ http: //dixitpatel.com/integrating-pdf-in-android-application/
Android è dotato di un quadro da Android 5.0 / Lollipop, si chiama PDFRenderer . Se si può fare l'ipotesi che gli utenti dispongano di Android 5.0, è probabilmente la soluzione migliore.
C'è un esempio ufficiale sul sito degli sviluppatori di Google:
http://developer.android.com/samples/PdfRendererBasic/index.html
non supporta annotazione o altre funzioni più avanzate; per chi la vostra davvero indietro a uno con l'intenzione di aprire un'applicazione completa, o incorporare uno SDK come MuPDF .
(Disclaimer:. Ho molto occasionalmente lavoro su MuPDF)
Aggiungi 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);
aggiungere anche provider_paths.xml a res -> xml cartella ed è necessario aggiungere il codice qui sotto al manifesta ??p>
<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>
In aggiunta a quelle contrassegnate come risposta che avrebbe bisogno di queste autorizzazioni nel manifest.xml
**
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
**