Autore Topic: Leggere file privati in adobe reader e/o webview senza usare contentprovider  (Letto 1005 volte)

Offline Leon Alucard

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
Ragazzi, questo è un problema abbastanza serio.

Ho dei dati salvati nella cartella privata della mia applicazione (/data/data/packageapplicazione) e alcuni di questi sono dei pdf, che ho bisogno di leggere tramite adobe reader.

Il problema sta nel fatto che essendo privati i miei file non posso leggerli con un'altra applicazione, a meno che io non sfrutti un contentprovider, che per chi non lo sa, permette di rendere disponibili dei dati privati dell'applicazione tramite dei metodi.

Nel mio caso il contentprovider non va bene, perchè i dati non devono essere globali, ossia che eventualmente possono leggere tutti da qualsiasi app ne faccia richiesta, ma solo io devo poterli aprire dalla mia applicazione, essendo privati e molto importanti.

Cartella sdcard no
ContentProvider no

Spero di essermi spiegato bene.

Chi mi da una mano?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
0
Ragazzi, questo è un problema abbastanza serio.

Lo sono tutti, fino a quando non si trova una soluzione

Citazione
Ho dei dati salvati nella cartella privata della mia applicazione (/data/data/packageapplicazione) e alcuni di questi sono dei pdf, che ho bisogno di leggere tramite adobe reader.

Il problema sta nel fatto che essendo privati i miei file non posso leggerli con un'altra applicazione, a meno che io non sfrutti un contentprovider, che per chi non lo sa, permette di rendere disponibili dei dati privati dell'applicazione tramite dei metodi.

I dati salvati nell'internal storage sono privati di "default" ma nel momento in cui li crei puoi specificare tu stesso la visibilità da dargli, vedi esempio: Data Storage | Android Developers

Citazione
Nel mio caso il content provider non va bene, perchè i dati non devono essere globali, ossia che eventualmente possono leggere tutti da qualsiasi app ne faccia richiesta, ma solo io devo poterli aprire dalla mia applicazione, essendo privati e molto importanti.

In realtà tu puoi definire dei permessi personalizzati che delle applicazioni intenzionate ad accedere al tuo content provider devono richiedere.   Come hai potuto notare un content provider espone dati ma non "a caso", tanto è vero che per accedere a contatti o sms devi richiedere degli appositi permessi.
Comunque, la tua richiesta un pochino mi confonde. Tu vuoi che i tuoi dati siano accessibili da alcune applicazioni *di terze parti* (adobe reader) ma allo stesso tempo non accessibili da altre. Giusto?

Offline Leon Alucard

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
0
Ciao,
scusa la confusione, l'ho scritto in fretta.

Io devo visualizzare dei dati sensibili in formato pdf, e per fare questo, senza cercare molto, ho trovato la possibilità di aprirli con adobe reader.

Quindi non so se si può fare in modo diverso, anche perchè mi sarebbero utili alcuni strumenti standard del reader come zoom, barra di navigazione e cose del genere.

Io una mezza soluzione l'ho trovata, ed è il salvataggio dei dati con la visibilità settata a Context.MORE_WORLD_READABLE.

Però non so se è la giusta soluzione.

Mettiamo che io abbia dei messaggi privati, dei bilanci o cose del genere...salvati nella cartella dell'app.

Voglio che l'utente lo possa visualizzare in tutta comodità, come permette adobe reader, ma non voglio che questi file possano essere aperti partendo da altre app o dall'archivio (come invece permette la sdcard). Solo dalla mia app deve essere possibile caricarli e visualizzarli nel reader di adobe.

Lo stesso problema ce l'ho con delle immagini da far visualizzare in tag img che si trovano all'interno di una webview.

Se esiste qualche soluzione che collidi col mio fabbisogno bene, aiutatemi please...e se l'ho già trovata usando quel settaggio, ancora meglio.

Offline rickyds

  • Nuovo arrivato
  • *
  • Post: 13
  • Respect: 0
    • riccardodesilva
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus S
  • Sistema operativo:
    Ubuntu 11.10, Windows 8
Re:Leggere file privati in adobe reader e/o webview senza usare contentprovider
« Risposta #3 il: 04 Gennaio 2013, 15:20:04 CET »
0
Credo di trovarmi anch'io nella situazione dell'autore del post e mi permetto di spiegare il mio problema che, da quanto ho letto, è molto simile al suo.

Semplificando, devo realizzare un'applicazione che permetta all'utente di scaricare da un mio server una serie di PDF che, una volta salvati sul dispositivo, possano essere aperti in qualsiasi momento. Non c'è nessun problema nell'utilizzare poi applicazioni di terze parti per leggere i PDF (es: Adobe Reader), se non per il fatto che tali files debbano rimanere nascosti all'utente e fruibili solo se richiamati dalla mia applicazione android, poiché contengono materiale ad uso strettamente personale, che non può e non deve essere ridistribuito.

E' chiaramente su questo nodo che nascono i problemi.

In prima istanza ho provato a salvare i files nell'internal storage in modalità MODE_WORLD_READABLE, passando l'uri del file all'Intent lanciato per avviarne l'apertura con un programma adatto. In tal modo i pdf mi sembrano difficilmente raggiungibili dall'utente medio, perchè non visibili con un file explorer, ma leggendo il language reference questa strada (che preferisco) pare tuttavia insicura per definizione ed ora persino deprecata.

Usando un content provider, il file pdf può invece essere immagazzinato nell'internal storage in modalità MODE_PRIVATE, e condiviso poi con un pdf reader. Ma, adottando questo metodo, la situazione peggiora poiché dopo una serie di test ho notato che sia Adobe Reader che ThinkFree Office, ad esempio, si prendono la briga di salvare una copia del documento nell'external storage, lasciando libero l'utente di farne quel che vuole (copiarlo su qualunque altro dispositivo, condividerlo con chiunque, ecc...).

Oltretutto, l'aggravante che riguarda entrambe le soluzioni è che, nel caso venga utilizzato Adobe Reader, un utente in possesso di un profilo per il Cloud di Acrobat.com può uploadare in ogni momento il pdf sulla rete, pigiando semplicemente su un tasto attivo e ben in evidenza. E' chiaro che quel pdf lo potrà in un secondo momento scaricare da qualsiasi postazione e distribuirlo a chi gli pare e piace, e questo non è contemplato.

In che modo mi consigliate di superare questo problema?
In linea teorica mi sembra logico pensare che la situazione migliore sarebbe internalizzare nell'applicazione una libreria Java ottimizzata per Android che interpreti e permetta di consultare le pagine dei pdf salvati nell'internal storage in MODE_PRIVATE. E' giusto il ragionamento? Esistono librerie, anche a pagamento, che lo facciano?

Accetto volentieri consigli e strade alternative!

Grazie