Apertura pdf con altre app dalla cartella risorse, soluzioni alternative
-
26-12-2019 - |
Domanda
Nella mia app, ho alcuni pdf memorizzati nella mia cartella risorse.Ho visto librerie per l'apertura di pagine pdf, ma penso che app come quickoffice siano migliori nel mostrare i pdf rispetto alle librerie che ho visto.Pertanto, desidero mostrare il pdf usando Intent.ACTION_VIEW
, come questo:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
Tuttavia, questo non è possibile perché le app di terze parti non sono autorizzate ad accedere ai file nel mio pacchetto.Pertanto ho bisogno di copiare i file nella memoria esterna e fornire quel file all'intento.
Questo mi porta alla mia domanda:i miei pdf sono di dimensioni piuttosto grandi, quindi penso che sarebbe stupido memorizzarli due volte (una volta nella mia cartella delle risorse e una volta nella memoria esterna).Quindi mi chiedo se c'è un work-around per questo.Potrei per esempio fare:
//Copy file to external storage
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, "application/pdf");
getActivity().startActivity(intent);
//Delete file from external storage
È un buon work-around o questo causerà problemi con l'app di visualizzazione pdf?O c'è un diverso work-around?
Soluzione
Pertanto ho bisogno di copiare i file nella memoria esterna e fornire quel file all'intento.
Puoi anche provare mio StreamProvider
, Canned ContentProvider
, basato su Google FileProvider
, che flussi da beni.
Per più risorse, questo dovrebbe funzionare per StreamProvider
Metadati XML:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset
name="whatevs"/>
</paths>
Questo dovrebbe risolvere tutto content://your.authority.name.goes.here/whatevs/*
Uri
valori (per vari valori di *
) ai file all'interno di assets/
.Se si desidera limitare l'ambito a una sottodirectory specifica di assets/
(dire, assets/goodstuff/
), si userebbe:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<asset
name="whatevs"
path="goodstuff/"/>
</paths>
E, se questo non funziona, dovrebbe, quindi sentitevi liberi di invia un problema con un caso di prova riproducibile.
È un buon work-around o questo causerà problemi con l'app di visualizzazione pdf?
startActivity()
è asincrono e quindi il visualizzatore PDF esterno non sarà mai in grado di accedere al file in questo modo.