Werden die Android-Berechtigungen WRITE_EXTERNAL_STORAGE
und READ_EXTERNAL_STORAGE
auslösen die neue Grant-Erlaubnis Dialog von Android M?Erteilen Erlaubnis für EXTERNAL_STORAGE in Android M?
Antwort
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:
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
Wo siehst du das? – fattire
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.
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. –
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
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.
'' '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 ... –
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);
}
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
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
Ich nur chechek, in android m einige Berechtigungen wurde herabgestuft, so ist Ihre Antwort völlig falsch – greywolf82