2015-02-04 24 views
5

Ho diverse applicazioni costruite sullo stesso motore. Questo motore sta memorizzando i dati in SQLite. La struttura del database è la stessa per tutte le applicazioni. Devo organizzare uno spazio di archiviazione comune per tutte queste applicazioni.Come posso archiviare i dati delle poche applicazioni in un unico posto?

Ad esempio, c'è un'applicazione A e B. Il primo utente ha installato l'applicazione A e ha aggiunto i dati, quindi ha installato l'applicazione B e questo è necessario per sincronizzare i database di queste due app. L'utilizzo di una funzione dei provider di contenuti non funzionerà perché in questo caso l'applicazione B non funzionerà senza l'applicazione A. E inoltre non sapremo quale applicazione utente installa per prima.

C'è un'idea per sincronizzare il database di tutte le applicazioni e ogni applicazione rimarrà con il proprio database, ma poi avrò una copia dei database. Significa quante app vengono installate quante più copie dei database avrò.

Forse c'è una sorta di modo pulito per realizzare l'idea?

+0

Puoi spiegare ad un livello più alto quello che stai cercando di realizzare? Mi chiedo perché l'utente installerà più app simili. E sarà comune per loro farlo? – bryan

+0

Quindi, la mia prima APP è https://play.google.com/store/apps/details?id=com.aosc La mia seconda app è https://play.google.com/store/apps/details? id = com.numbersforsms Entrambe le app hanno una chat con la cronologia. Quindi, ho bisogno di avere la stessa cronologia delle conversazioni sull'app dello stand quando sono installati sullo stesso dispositivo. – SorryForMyEnglish

+0

Vedi: http://stackoverflow.com/questions/7053809/share-sqlite-database-between-2-android-apps – John

risposta

1

Puoi archiviare il database sull'archivio esterno e accedervi da tutte le tue applicazioni (Usa getExternalStorageDirectory).

Utilizzare la classe openOrCreateDatabase method of the SQLiteDatabase per accedervi e leggere/scrivere dati da esso.

Poiché l'accesso da più processi può causare blocchi, suggerisco di gestirlo autonomamente utilizzando un file con il nome/nomepacchetto dell'applicazione di blocco in modo da poter sincronizzare l'accesso ai dati tra le applicazioni.

4

Perché non provare a utilizzare "sharedUserId" in tutte le app. Con questo puoi anche accedere ai dati delle altre app.

Supponendo che tu conosca già tutte le altre app, al primo caricamento di ogni applicazione si avvia la ricerca di una cartella comune in cui si crea il database. Questa cartella può essere nella tua sdcard. Se trovi il file DB lì, puoi aprirlo e usarlo. Altrimenti ne crei uno. Quindi utilizzare lo stesso database in tutte le app?

Non sono sicuro quali sono le implicazioni dell'apertura/scrittura sullo stesso DB da varie app. Forse hai bisogno di capire un meccanismo di blocco durante le scritture (Forse crei un file .lock quando scrivi sul DB?)

2

Mi sono verificato lo stesso problema di progettazione (più app che utilizzano lo stesso motore contengono tabelle di database SQLite persistenti, servizi e tonnellate di logica).

dopo che ho fatto la mia ricerca, ho paura che la conclusione è stata che l'unico modo per farlo è: farlo in modo di Googles:

Google Play Services è un processo che Google ha fatto esattamente per risolvere questo problema per il proprio scenario - motore che dovrebbe essere sempre disponibile per tutte le app (inclusa la propria). questo significa che è un'applicazione indipendente che espone i suoi servizi e fornitori di contenuti a tutte le app.

Google forza l'installazione di Google Play Services senza interruzioni in background tramite l'app Google Play Store. questo è un privilegio che nessun'altra app può avere, perché controllano entrambe le app e il sistema operativo Android stesso (non equo!)

quindi, se puoi forzare i tuoi utenti a scaricare applicazioni dedicate solo per il tuo motore (come Google fai) - è fantastico!

in caso contrario, quindi sarà necessario accontentarsi di un'app Master/primaria che deve essere installata ed è l'unica che espone i dati e i servizi a tutti gli altri.

+0

Stai parlando del servizio Google Play. Sì, questa è un'idea corretta, ma qui c'è un problema: solo a Google è consentito forzare le persone ad installare app aggiuntive. Se andrò in questo modo, il 90% degli utenti rifiuterà di installare un'app aggiuntiva. PS. Amazon non ha Google Play Service sui suoi dispositivi e non consente di pubblicare app che non funzioneranno senza di esso. – SorryForMyEnglish

+0

Sì. Tuttavia, puoi dire ai tuoi utenti che per poter utilizzare una delle tue app devono reindirizzare per scaricare la pagina del tuo motore. Ovviamente molti utenti rifiuterebbero, ma questa è sempre un'opzione ... –

Problemi correlati