1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Anfänger Frage zu Android Permissions

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Studdi23, 13.05.2012.

  1. Studdi23, 13.05.2012 #1
    Studdi23

    Studdi23 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    13.05.2012
    Hallo zusammen,

    ich probiere gerade ein kleines Android Tutorial aus und hätte eine Frage zu den Permissions. Und zwar habe ich das NoteList Beispielprojekt importiert und deployed. Zuvor wurde die Manifest Datei etwas modifiziert da ich aus einem anderen Android Projekt heraus auf die Datenbank der NotesList-App schreibend zugreifen möchte und hierzu die XML um eine writePermission erweitert habe. Die Manifest Datei sieht nun folgendermaßen aus (Ausschnitt):
    HTML:
    <provider
                android:name="NotePadProvider"
                android:authorities="com.google.provider.NotePad"
                android:exported="false"
                android:grantUriPermissions="true"
                android:writePermission="com.example.android.notepad.READ_WRITE_NOTES" >
                <grant-uri-permission android:pathPattern=".*" />
            </provider>
    
    Im zweiten Projekt habe ich diese Permission verwendet, um Testdaten in die notes-Tabelle einzufügen.

    HTML:
    <uses-permission android:name="com.example.android.notepad.READ_WRITE_NOTES" />
    
    Code:
    ContentValues values = new ContentValues();
              values.put("title", "New note");
              values.put("note", "This is a new note");
              ContentResolver contentResolver = activity.getContentResolver();
              List<String> ps = contentResolver.insert(Uri.parse("content://com.google.provider.NotePad/notes"), values)
                .getPathSegments();
              Log.i(getClass().getName(), "Inserted new Row with ID: " + ps.get(ps.size() - 1));
    
    Wenn ich die App ausführe (Buttonklick schreibt Daten in die DB) erhalte ich eine SecurityException.
    Es funktioniert lediglich wenn ich das exported flag auf true setze

    HTML:
    android:exported="true"
    
    Dann allerdings werden die Permissions ignoriert was ich nicht möchte. Ich verstehe anscheindend die Bedeutung der permission Attribute nicht ganz bzw. wie sie richtig und sinnvoll eingesetzt werden. Das gilt vor allen Dingen für das Attribut grant-uri-permission. Wäre toll wenn mir das jemand, vielleicht anhand von Beispielen, erklären könnte.

    Gruß
    Mario
     
  2. jna, 13.05.2012 #2
    jna

    jna Ehrenmitglied

    Beiträge:
    7,398
    Erhaltene Danke:
    1,299
    Registriert seit:
    28.01.2011
  3. Studdi23, 13.05.2012 #3
    Studdi23

    Studdi23 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    13.05.2012
    Ups, den Forenbereich hab ich wohl übersehen :D
    Kann ich den Beitrag verschieben oder muß ich nen Doppelpost erstellen?
     
  4. jna, 14.05.2012 #4
    jna

    jna Ehrenmitglied

    Beiträge:
    7,398
    Erhaltene Danke:
    1,299
    Registriert seit:
    28.01.2011
    Ich schlage vor, du meldest den Beitrag (über das Ausrufezeichen) und lässt den verschieben (und dabei diese Posts auch gleich löschen :D)
     
  5. segelfreund, 14.05.2012 #5
    segelfreund

    segelfreund Ehrenmitglied

    Beiträge:
    12,099
    Erhaltene Danke:
    1,554
    Registriert seit:
    12.01.2010
    Thread verschoben
     
  6. Studdi23, 15.05.2012 #6
    Studdi23

    Studdi23 Threadstarter Neuer Benutzer

    Beiträge:
    3
    Erhaltene Danke:
    0
    Registriert seit:
    13.05.2012
    Hallo,

    also ich bin jetzt etwas weiter gekommen. Ich führe nun beide Applikation über den gleichen Prozess aus indem ich beiden Apps die gleiche sharedUserId vergebe. Die SecurityException ist dadurch verschwunden,dafür bekomme ich jetzt aber die Fehlermeldung das es sich um eine readonly Datenbank handelt. Es wurden jedoch sowohl write permission gesetzt als auch Schreibrechte auf Dateiebene vergeben, d.h. mit mit dem Befehl "chmod 777 note_pad.db" Hier der Stacktrace:

    Code:
    05-15 17:36:56.536: I/SqliteDatabaseCpp(567): sqlite returned: error code = 8, msg = statement aborts at 1: [BEGIN IMMEDIATE;] attempt to write a readonly database, db=/data/data/com.example.android.notepad/databases/note_pad.db
    05-15 17:36:56.567: E/SQLiteDatabase(567): Error inserting created=1337103416544 title=New note note=This is a new note modified=1337103416544
    05-15 17:36:56.567: E/SQLiteDatabase(567): android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database
    ...
    
    Und hier noch die Dateidetails der note_pad.db zur Bestätigung:
    Code:
    -rwxrwxrwx app_40   app_40       4096 2012-05-13 16:02 note_pad.db
    
    Ist denn kein Experte unter euch der mit weiterhelfen kann?

    Gruß
    Mario
     

Diese Seite empfehlen