Laden...

Xamarin (Android): Zugriff auf SQLite aus zweiter App

Erstellt von Steven85 vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.015 Views
Steven85 Themenstarter:in
99 Beiträge seit 2011
vor 6 Jahren
Xamarin (Android): Zugriff auf SQLite aus zweiter App

Hallo zusammen

ich habe zwei Apps mit ähnlicher Datenbankstruktur welche beide mit SQLLite erstellt wurden.
hier ein Beispiel.


// Zugriff aus der App 1
private string sSQLPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "App.SQLite");
// Pfad: "/data/user/0/com.App/files/App.SQLite"

using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
{
       con.CreateTable<TAB_Tabelle>();
       // Insert...
}

Jetzt Will ich aus der zweiten App auf die Datenbank der ersten App zugreifen um z.B. grundlegende Daten zu übernehmen.


// Zugriff aus der App 2
private string sSQLPath = "/data/user/0/com.App/files/App.SQLite"

if (File.Exists(sSQLPath))
{
   using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
   {
          con.CreateTable<TAB_Tabelle>();
          // Get...
   }
}

Hier kommt die Fehlermeldung SQLite.Net.SQLiteException: Could not open database file: /data/user/0/com.App/files/Trainingsbeteiligung.SQLite (CannotOpen).

Wenn ich z.B. die Datenbank kopieren will mit File.Copy("/data/user/0/com.App/files/App.SQLite", "/data/user/0/com.App2/files/App.SQLite", true);,
kommt die Fehlermeldung System.UnauthorizedAccessException: Access to the path.
Evtl. ist es ein Berechtigungsproblem.

Geht es überhaupt auf die DB der anderen App zu zu greifen?

Gruß Steven

4.938 Beiträge seit 2008
vor 6 Jahren

Nein, jede App hat ihren eigenen privaten Bereich (aus Sicherheitsgründen).

H
523 Beiträge seit 2008
vor 6 Jahren

Geht es überhaupt auf die DB der anderen App zu zu greifen?

Das geht nur wenn Dein Gerätet gerootet ist.

Unter Android löst man so eine Aufgabenstellung mit Content-Providern

Steven85 Themenstarter:in
99 Beiträge seit 2011
vor 6 Jahren

Gibt es irgendwo evtl. ein Beispiel? Mir geht es nur darum Daten aus 2 Tabellen meiner SQLite Datenbank zu übertragen.

R
74 Beiträge seit 2006
vor 6 Jahren
Steven85 Themenstarter:in
99 Beiträge seit 2011
vor 6 Jahren

Leider scheine ich zu blöd zu sein um das Ganze zu verstehen. Ich bräuchte evtl. etwas Starthilfe.


public class Repository
{
        private string sSQLPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "Team.SQLite");

        public Repository()
        {
            using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPathSpielstatistik, false))
            {
                con.CreateTable<SAI_Saison>();
                con.CreateTable<SPI_Spieler>();
                con.CreateTable<SAI_SPI_Saison_Spieler>();
            }
        }

        private List<SPI_Spieler> GetAll_SPI_Spieler()
        {
            using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
            {
                return con.Table<SPI_Spieler>().Where(s => s.Aktiv == true).ToList() ?? new List<SPI_Spieler>();
            }
        }

        public List<SAI_Saison> GetAll_SAI_Saison()
        {
            using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
            {
                return con.Table<SAI_Saison>().ToList() ?? new List<SAI_Saison>();
            }
        }

        private SAI_SPI_Saison_Spieler Get_SAI_SPI_Saison_Spieler(int iSaison_ID, int iSpieler_ID)
        {
            using (SQLiteConnection con = new SQLiteConnection(new SQLitePlatformAndroidN(), sSQLPath, false))
            {
                return con.Table<SAI_SPI_Saison_Spieler>().Where(s => s.Saison_ID == iSaison_ID && s.Spieler_ID == iSpieler_ID).ToList().FirstOrDefault() ?? new SAI_SPI_Saison_Spieler();
            }
        }
}

Hier ein Auszug aus meiner Repository Klasse aus App1. Jetzt will ich im Grunde lediglich aus App2 auf die bereits dort gespeicherten Daten zugreifen.
Am besten arbeite ich immer mit Video Tutorials. Nur leider habe ich noch keines gefunden was mich weiter bringt.

Gruß Steven

16.830 Beiträge seit 2008
vor 6 Jahren

Du kannst aber nicht auf den privaten Raum einer anderen App zugreifen. Das hat ja Th69 bereits gesagt. 😉

Du kannst nur auf Uris zugreifen, die eine andere App in Android registriert.
Das steht auch so in dem Link, den Du bereits bekommen hast. Wir werden Dir jetzt kein Video erstellen, nur weil Du kein Text durchlesen willst... =)

Im übrigen, egal wo, erstellt man keine Verbindungen in Methoden.
Das ist genau 0 modular und genau 0 testbar.