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

È stato utile?

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

<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" />

**

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top