2015-07-01 2 views

Antwort

0

die Dokumentation nach:

begrenzte Berechtigungen zum Zeitpunkt der Installation Zugegeben: Wenn der Benutzer installiert oder aktualisiert die App, das System des App, alle Berechtigungen, die die App-Anfragen gewährt, die unter PROTECTION_NORMAL fallen.

Da also READ_EXTERNAL_STORAGE unter PROTECTION_NORMAL fällt, wird das Dialogfeld nicht ausgelöst.

Aber weil das Niveau der WRITE_EXTERNAL_STORAGE PROTECTION_DANGEROUS ist, wird es im Rahmen dieses Verhalten fallen, wie in docs beschrieben:

Benutzer Grants Berechtigungen zur Laufzeit: Wenn die App eine Erlaubnis anfordert, zeigt das System ein Dialog an den Benutzer und ruft dann die Rückruffunktion der App auf, um sie darüber zu informieren, ob die Berechtigung erteilt wurde. Wenn ein Benutzer eine Berechtigung erteilt, wird die App alle Berechtigungen in deren Erlaubnis Funktionsbereich gegeben, die in der App erklärt wurden manifest

Hier wird die Quellen für die Schutzstufe:

detailed list

+0

Android docs zum Beispiel sagen, dass das Internet die Erlaubnis ohne Problem erteilt wird, aber es ist jetzt gefährlich, so dass es nur zwei Hypothesen: die Dokumentation völlig falsch ist oder Es gibt eine Änderung in Android m Quellcode über die Schutzstufe. – greywolf82

+0

Ich denke, dass die Docs ist nicht ganz klar darüber. Die einzige explizite Sache ist, dass "das System der App alle Berechtigungen gewährt, die die App anfordert, die unter PROTECTION_NORMAL fallen." – yshahak

+1

Ich nur chechek, in android m einige Berechtigungen wurde herabgestuft, so ist Ihre Antwort völlig falsch – greywolf82

0

Nach bis Android docs müssen Sie keine Berechtigung zum Lesen und Schreiben von externem Speicher anfordern.

Edit: in der neuesten Android-M-Release müssen Sie sowohl für Lese- und Schreibberechtigungen wird

+0

Wo siehst du das? – fattire

2

Meine Antwort auf meinen Tests auf M Preview SDK Version 2, mit einem Emulator basiert fragen.

Wenn Sie auf die Vorschau-API-Ebene MNC ausgerichtet sind, wird WRITE_EXTERNAL_STORAGE standardmäßig nicht gewährt und ist Teil der neuen dynamischen Berechtigungs-API.

Sie sehen die Speicherberechtigung als Umschaltfläche im Menü der neuen App-Berechtigungen in den Geräteeinstellungen. Sie können Activity.requestPermissions verwenden, um das Popup für diese Berechtigung anzuzeigen.

Jedoch, wenn Sie api Ebene < MNC zielen, wird es nicht als eine gefährliche Erlaubnis klassifiziert, und so wird ohne eine Möglichkeit für den Benutzer gewährt, es zu deaktivieren (nicht in den Berechtigungseinstellungen angezeigt), und Sie werden gewährt nicht in der Lage, Code mit Activity.requestPermissions trotzdem zu kompilieren, da das Vorschau-SDK minSdkVersion="MNC" erzwingt, um die neuen APIs zu verwenden.

Dies ist ein anderes Verhalten als Standortberechtigungen: Unabhängig von der API-Ebene, auf die Sie ausgerichtet sind, kann der Benutzer den Standort im Berechtigungsmenü deaktivieren.

Für die Erlaubnis Menü selbst ist die Erlaubnis Umschaltstatus standardmäßig eingeschaltet, wenn:

  • Ziel API-Ebene < MNC.
  • Ziel-API-Ebene = MNC, aber Sie aktualisieren die App auf dem Gerät von einer früheren Installation, bei der die Ziel-API-Ebene niedriger als MNC war.

Andernfalls wird der Schalter standardmäßig als AUS angezeigt.

Hoffe es hilft.

+0

Und der Unterschied, den ich zwischen Speicher- und Standortberechtigungen beobachtet habe, ist eindeutig undokumentiert ... Ich habe keine Ahnung, ob es ein Designfehler, ein Dokumentationsfehler oder ein Plattformfehler ist. –

0

Die Speicherberechtigung fällt unter die gefährliche Schutzstufe. Daher werden bei der Installation in Android M nicht alle gefährlichen Schutzstufenberechtigungen gewährt, wenn das App-Ziel-SDK auf 23 gesetzt ist. Sie werden zur Laufzeit angegeben. Und ja diese Berechtigungen können zur Laufzeit auch widerrufen werden.

Kein Berechtigungsdialog wird nicht automatisch ausgelöst, Sie müssen eine Anfrage mit einer API wie der Methode requestPermissions() ausführen, um diesen nativen Dialog anzuzeigen.

Bitte überprüfen Sie die gefährliche Ebene Berechtigungsliste here

9

ich mit Guillaume Perrot ‚s Antwort zustimmen. Ich habe die ähnliche Frage getroffen, als ich die Erlaubnis von READ_WRITE_EXTERNAL_STORAGE in AndroidManifest.xml

mit keine Berechtigungen zeigt sich in der App standardmäßig schreiben, müssen die Menschen auf den Schalter, der Speicherung in der App wechseln permissions.Then ich meine targetSdkVersion ändern in build.gradle zu weniger als 23(MNC) und andere Nummer im Zusammenhang mit sdkVersion, die App mit den Berechtigungen installiert auf.

Die andere Möglichkeit ist, requestpermission Funktion an der Stelle zu schreiben, die Sie benötigen die Genehmigung. Der Code ist wie folgt:

if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)== 
    PackageManager.PERMISSION_GRANTED) { 
    //do the things} else { 
    requestPermissions(new String[] { Manifest.permission.WRITE_EXTERNAL_STORAGE }, 
     AnyNumber); 

Weil ich weniger als 15 Ruf, so kann ich nicht wählen für den Guillaume Perrot ‚s answer.Just diese Art und Weise verwenden, um meine Idee zu zeigen.

+0

'' 'if (checkSelfPermission (Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED)' '' ist erfüllt, auch wenn ich die Berechtigung in den Einstellungen widerrufe. Dann scheitert die App ... –

5

löste ich diese hinzufügen, wenn Check-Version für Android M

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        requestPermissions(new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); 
        requestPermissions(new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 
      }