7

Ich entwickle eine Gruppe komplexer Android-Anwendungen, die gemeinsame Status- und Konfigurationseinstellungen verwenden müssen.Gemeinsame Nutzung und Persistenz von Daten zwischen mehreren Android-Anwendungen

Zum Beispiel finden Sie in diesem Bild mein Szenario zu erklären:

enter image description here

Ich möchte, dass APP 1, APP 2 und APP 3 (Lesen/Schreiben) für den Zugriff auf die Daten der gemeinsamen Speicherbereich. Außerdem muss ich den Schutz der Deinstallation deinstallieren, d. H. Ich möchte nicht, dass die Daten entfernt werden, wenn der Benutzer eine der Anwendungen deinstalliert.

Ich habe bereits über SQLite-Datenbanken lesen, ContentProviders und Schreiben auf interne und externe Speicher, aber jeder der oben genannten Methoden Nachteile haben, wie nachstehend aufgeführt:

  • SQLite-Datenbank: DB auf App deinstallieren gelöscht und ist privat zu jeder App
  • Contentprovider: die Daten werden entfernt, wenn die App mit dem Contentprovider entfernt
  • Interner Speicher: ist privat jede App und die Daten werden auf App deinstallieren gelöscht (http://developer.android.com/training/basics/data-storage/files.html#InternalVsExternalStorage)
  • Externer Speicher: Ist unzuverlässig
  • Speicher auf Server (Benutzer SD-Karte entfernen): nicht möglich, Benutzer nicht zuverlässig Internetverbindung haben

EDIT:

Ich will nicht Abhängigkeiten von den Google Play-Diensten, da ich die Apps über den Play Store und als Downloads von Drittanbietern vertreiben werde.

Bitte helfen Sie mir.

+1

'Externer Speicher: Ist unzuverlässig (Benutzer kann SD-Karte entfernen)'. Falsche Idee. Bei den meisten Geräten ist externer Speicher eingebaut. Wenn Sie eine microSD-Karte hinzufügen, ist dies ein entfernbarer Speicher, wird aber oft als externer Speicher bezeichnet. – greenapps

Antwort

1

Google Drive macht das für Sie. Sie erhalten grundsätzlich die Berechtigung für ein lokales Dateisystem, das von einem Remote-Dateisystem unterstützt wird. Auf den meisten Telefonen ist dies vorinstalliert, so dass das Problem der Deinstallation, um das Sie sich sorgen, weniger problematisch ist.

Sie könnten einen Ordner für Ihre Apps erstellen, den Sie dann lesen/schreiben können.

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

+0

Aber was, wenn der Benutzer keine Play Services installiert hat? Dieser Ansatz schlägt in diesem Fall fehl. – jazdev

+0

Wenn Sie auf Märkte im Google Play Store abzielen (dies deckt mehr als die Mehrheit der Anzahl der Telefone ab), können Sie die Google Play-Dienste (APi-Anruf) installieren lassen. Wenn Sie befürchten, dass dies ein Problem ist, empfehle ich Ihnen, bizdev richtig gut zu machen, damit Ihre Remote-Dateisystem-App von allen großen Mobiltelefonherstellern in der Systempartition vorinstalliert wird, so dass normale Benutzer sie nicht von ihrem Telefon entfernen können;) Und dann können Sie alle Ihre Anforderungen erfüllen. Die Anforderung für die Deinstallationsprobe richtet sich nach dem App-Modell zum Entfernen der App und der Daten als Einheit. –

1

Sie können die gemeinsamen Vorlieben Objekt verwenden Präferenzen zum Lesen und Schreiben von Daten aus einer Datei. Am wichtigsten ist es, MODE_MULTI_PROCESS zu verwenden. Das Bit MODE_MULTI_PROCESS wird verwendet, wenn mehrere Prozesse dieselbe SharedPreferences-Datei mutieren.

Verwenden Sie den folgenden Code ein:

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

Und wo würde diese Datei liegen? – greenapps

+0

SharedPreferences werden in einer XML-Datei in den App-Datenordnern gespeichert, dh /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PREFS_NAME.xml oder die Standardeinstellung an: /data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml SharedPreferences, die zur Laufzeit hinzugefügt werden, werden nicht im Eclipse-Projekt gespeichert. –

+0

Ist es sicher, sensible Daten mit MODE_MULTI_PROCESS zu speichern? – jazdev

0

Ich bin damit einverstanden, dass Gemeinschafts-Einstellungen mit world_readable wird nicht ausreichend für Sie oder über Internet-Sharing nicht möglich ist, aber trotzdem kann man eine Sache tun.

Verwenden von Broadcast-Empfängern und benutzerdefinierten Broadcasts. mit redundanten gemeinsamen Daten über alle Apps mit gemeinsamen Einstellungen.

Wer die Daten aktualisiert, sendet eine Übertragung an das System. Alle Apps implementieren Broadcast-Empfänger.Immer wenn eine neue Sendung empfangen wird, aktualisieren sie die Daten in gemeinsamen Voreinstellungen. App A -> sendet Broadcast, wenn Daten aktualisiert werden.

Wenn App B bereits installiert ist, empfängt App B auch Broadcast und speichert die Daten von dieser Absicht.

wenn App B neue Daten aktualisiert. APP B -> sendet Broadcast für die gemeinsamen Daten Andere Apps werden Daten aktualisieren.

  • Nur gemeinsame Daten gehen verloren, wenn alle Apps entfernt werden. Wenn mindestens eine App installiert ist, bleiben Daten bestehen.
0

Präferenzdaten werden immer in jedem anwendungseigenen Kontext gespeichert. Verwenden Sie sharedUserId, und erstellen Sie in allen Apps eine neue Einstellungsdatei. Beim Öffnen jeder App muss die App den Präferenzwert aus allen anderen Anwendungskontexten prüfen und in ihre Präferenz schreiben, basierend auf dem letzten aktualisierten Zeitwert, der in der Präferenz verfügbar ist, um den neuesten aktualisierten Wert zu finden.

Wenn eine App geöffnet wird, werden die neuesten Daten lokal gespeichert. Wenn eine App installiert oder deinstalliert wird, sollte dies funktionieren.