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?

È stato utile?

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.

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