7

Sto sviluppando un gruppo di applicazioni Android complesse che devono condividere le impostazioni di stato e configurazione comuni.Condivisione e persistenza dei dati tra più applicazioni Android

Ad esempio, vedere questa immagine per spiegare il mio scenario:

enter image description here

voglio che APP 1, APP 2 e APP 3 siano in grado di accedere (lettura/scrittura) i dati per l'area di stoccaggio comune. Inoltre, ho bisogno della protezione da disinstallazione, ovvero non voglio che i dati vengano rimossi quando l'utente disinstalla una qualsiasi app.

ho già letto sui database SQLite, ContentProviders e scrittura interna ed esterna di storage, ma ciascuno dei metodi di cui sopra sono svantaggi come di seguito elencati:

  • database SQLite: DB viene eliminato su App disinstallazione ed è privato per ogni app
  • ContentProvider: i dati vengono rimossi quando l'applicazione con la ContentProvider viene rimosso
  • Memoria interna: è privato per ogni app e dati vengono cancellati in applicazione di disinstallazione (http://developer.android.com/training/basics/data-storage/files.html#InternalVsExternalStorage)
  • Storage esterno: è inaffidabile (utente può rimuovere la scheda SD)
  • Store su server: Non è possibile, l'utente potrebbe non disporre di connessione internet affidabile

EDIT:

non voglio alcun dipendenze da Google Play Services perché distribuirò le app tramite Play Store e come download di terze parti.

Please help me out.

+1

'Memoria esterna: non è affidabile (l'utente può rimuovere la scheda SD)'. Idea sbagliata Sulla maggior parte dei dispositivi, la memoria esterna è incorporata. Se aggiungi una scheda micro SD, allora questa è una memoria rimovibile ma spesso chiamata memoria esterna. – greenapps

risposta

1

Google Drive lo fa per te. Praticamente ti viene concessa l'autorizzazione per un filesystem locale supportato da uno remoto. Sulla maggior parte dei telefoni questo viene preinstallato, quindi il problema di disinstallazione di cui sei preoccupato è meno di un problema.

È possibile creare una cartella per le app che è possibile quindi leggere/scrivere.

https://developers.google.com/drive/android/

+0

Ma cosa succede se l'utente non ha installato Play Services? In questo caso, questo approccio fallisce. – jazdev

+0

Se stai mirando ai mercati del Google Play Store (questo copre più della maggior parte del numero di telefoni là fuori), allora puoi averli a installare i servizi di gioco di google (chiamata APi). Se sei preoccupato che si tratti di un problema, ti consiglio di diventare veramente bravo a bizdev che l'app del file system remoto sia preinstallata nella partizione di sistema da tutti i produttori di telefoni cellulari di grandi dimensioni, in modo che gli utenti normali non possano rimuoverli dal telefono;) E poi puoi soddisfare tutte le tue esigenze. Il requisito della prova di disinstallazione è in contrasto con il modello di app di rimozione dell'app e dei dati. –

1

Offriamo le preferenze condivise oggetto per leggere e scrivere le preferenze dati da un file. L'aspetto più importante è usare MODE_MULTI_PROCESS. Il bit MODE_MULTI_PROCESS viene utilizzato se più processi stanno mutando lo stesso file SharedPreferences.

utilizzare il seguente codice:

SharedPreferences shPrefernces = context.getSharedPreferences("filename", MODE_MULTI_PROCESS); 
String s1 = shPrefernces.getString("keytosearch1", ""); 
String pass = shPrefernces.getString("keytosearch2", ""); 
+0

E dove risiede questo file? – greenapps

+0

SharedPreferences sono memorizzati in un file xml nella cartella dei dati applicazione, vale a dire /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml o le preferenze predefinite a: /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml Le SharedPreferences aggiunte durante il runtime non sono memorizzate nel progetto Eclipse. –

+0

È sicuro salvare i dati sensibili usando MODE_MULTI_PROCESS? – jazdev

0

Sono d'accordo che le preferenze condivise con world_readable non sarà sufficiente per voi o la condivisione in Internet non è possibile, ma ancora si può fare una cosa.

Utilizzo di ricevitori broadcast e trasmissioni personalizzate. con dati comuni ridondanti su tutte le app con preferenze condivise.

Chi aggiorna i dati invierà una trasmissione al sistema. Tutte le app implementano il ricevitore broadcast.quando riceve una nuova trasmissione, aggiorna i dati nelle preferenze condivise. App A -> invia trasmissione quando i dati vengono aggiornati.

Se l'App B è già installata, l'App B riceve anche la trasmissione e salva i dati da tale intento.

se l'App B aggiorna i nuovi dati. APP B -> invia broadcast per i dati comuni Altre app aggiorneranno i dati.

  • Quando tutte le app vengono rimosse, verranno persi solo i dati comuni. Se almeno un'app è installata, i dati persistono.
0

I dati delle preferenze vengono sempre memorizzati all'interno del contesto di ciascuna applicazione. Usa sharedUserId e hai un nuovo file di preferenze creato in tutte le app. All'apertura di ogni app, l'app deve verificare il valore di preferenza da tutto il contesto di altre applicazioni e scrivere nella sua preferenza in base all'ultimo valore di tempo aggiornato disponibile nella preferenza per trovare l'ultimo aggiornato.

Ogni volta che un'app viene aperta, i dati più recenti verranno memorizzati nel suo locale. se una delle app è installata o disinstallata, dovrebbe funzionare correttamente.

Problemi correlati