2014-09-04 9 views
8

la mia app Android 4+ può creare diversi report in formato PDF. Sapere che vorrei offrire all'utente la possibilità di inviare il file via mail o di aprire in qualsiasi app in grado di gestire file PDF. Attualmente io uso il seguente codice:Invia un file PDF come Mail o offri app per visualizzare direttamente il file

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("application/pdf"); 

Uri uri = Uri.parse("file://" + reportFile.getAbsolutePath()); 
intent.putExtra(Intent.EXTRA_STREAM, uri); 

try { 
    startActivity(Intent.createChooser(intent, "Share PDF file")); 
} catch (Exception e) { 
    Toast.makeText(ReportsActivity.this, "Error: Cannot open or share created PDF report.", Toast.LENGTH_SHORT).show(); 
} 

Questo workes bene, tranne solo "invia" le applicazioni sono offerto subito come il Bluetooth, Google Drive, E-Mail, ecc ho installato l'applicazione Acrobat Reader che può di vista naturalmente PDF File. Ma anche questa app è elencata solo con "Invia per firma" e non con "Apri in Reader" o qualcosa del genere.

Ho pensato che l'intento dello ACTION_SEND significherebbe "invia ad altra app" e non "invia da qualche altra parte". Quale intento posso usare per includere anche le opzioni "apri con"?

risposta

13

Cosa intenti posso usare per includere "Apri con" opzioni pure?

ACTION_VIEW è per la visualizzazione di file.

startActivity(new Intent(Intent.ACTION_VIEW).setDataAndType(Uri.fromFile(reportFile), "application/pdf"))); 

ho pensato l'intento ACTION_SEND significherebbe "trasmettere all'altro app" e non striktly "inviare da qualche altra parte".

No, ACTION_SEND è per l'invio di cose. Ciò include "Invia a te stesso in un'altra app" in alcuni casi (ad esempio, l'invio a Google Drive), ma in particolare non è per la visualizzazione di file.

+0

Grazie mille per il suggerimento del chiarimento. C'è un modo per combinare questi due per consentire all'utente di scegliere di aprire O inviare il file? Naturalmente uso una seconda finestra di dialogo per chiedere prima se le opzioni di invio o l'opzione di visualizzazione dovrebbero essere offerte. Ma questo sarebbe un ulteriore passo per l'utente. Inoltre sarebbe brutto chiedere "Apri o Visualizza" prima di sapere se è disponibile un'applicazione di visualizzazione ... –

+0

@AndreiHerford: "C'è un modo per combinare questi due per consentire all'utente di scegliere di aprire OPPURE inviare il file?" - Non lo consiglierei, poiché non è tipico di altre app Android. Detto questo, puoi provare a sperimentare [con 'EXTRA_INITIAL_INTENTS'] (http://developer.android.com/reference/android/content/Intent.html#EXTRA_INITIAL_INTENTS). "Naturalmente uso una seconda finestra di dialogo per chiedere prima se le opzioni di invio o l'opzione di visualizzazione dovrebbero essere offerte" - IMHO, ci dovrebbero essere due trigger UI separati per ognuno, nessuno dei quali è denominato "open". "Visualizza" e "condividi" sono i veri verbi di Android. – CommonsWare

+0

Funziona perfettamente per avviare il lettore pdf apv installato per visualizzare un file PDF. Grazie. – Hong