webentwicklung-frage-antwort-db.com.de

Erforderliche Berechtigung für EXTERNAL_STORAGE in Android M erforderlich?

Lösen die Android-Berechtigungen WRITE_EXTERNAL_STORAGE und READ_EXTERNAL_STORAGE den neuen Grant-Berechtigungsdialog von Android M aus?

7
Matt

Ich stimme der Antwort von Guillaume Perrot zu. Ich habe die ähnliche Frage getroffen, wenn ich die Erlaubnis von READ_WRITE_EXTERNAL_STORAGE in AndroidManifest.xml schreibe. 

wenn in der App standardmäßig keine Berechtigungen angezeigt werden, müssen die Benutzer die Umschaltschaltfläche des Speichers in den App-Berechtigungen ändern. Dann ändere ich meine targetSdkVersion in build.gradle auf weniger als 23(MNC) und eine andere mit sdkVersion verknüpfte Nummer, wobei die App mit den Berechtigungen bei aktiviert ist .

Die andere Möglichkeit ist, die Funktion requestpermission an der Stelle zu schreiben, an der Sie die Berechtigung benötigen. 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 Ansehen habe, kann ich nicht für die Antwort von Guillaume Perrot stimmen. Verwenden Sie einfach diesen Weg, um meine Idee zu zeigen.

9
Elf Xu

Ich habe das Problem behoben, wenn Sie diese Version für Android M überprüfen

            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);
            }
6
Samuel Ivan

Meine Antwort basiert auf meinen Tests mit M Preview SDK Version 2, die einen Emulator verwenden.

Wenn Sie die MNC-Vorschau-API als Ziel festlegen, wird WRITE_EXTERNAL_STORAGE standardmäßig nicht gewährt und ist Teil der neuen dynamischen Berechtigungs-API.

Die Speicherberechtigung wird im neuen App-Berechtigungsmenü in den Geräteeinstellungen als Umschaltfläche angezeigt. Mit Activity.requestPermissions können Sie das Popup für diese Berechtigung anzeigen.

Wenn Sie jedoch auf eine API-Ebene <MNC abzielen, wird diese nicht als gefährliche Berechtigung eingestuft. Sie wird daher ohne die Möglichkeit für den Benutzer erteilt, sie zu deaktivieren (wird nicht in den Berechtigungseinstellungen angezeigt), und Sie können dies nicht Kompilieren Sie Code mit Activity.requestPermissions trotzdem, da das Vorschau-SDK minSdkVersion="MNC" die Verwendung der neuen APIs erzwingt.

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

Für das Berechtigungsmenü selbst ist der Berechtigungsumschaltstatus standardmäßig aktiviert, wenn:

  • Ziel-API-Ebene <MNC.
  • Ziel-API-Ebene = MNC, Sie haben jedoch ein Upgrade der App auf einer früheren Installation durchgeführt, bei der die Ziel-API-Ebene niedriger als die MNC war.

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

Ich hoffe es hilft.

2

Laut Android-Dokumenten müssen Sie keine Erlaubnis für das Lesen und Schreiben von externem Speicher einholen.

Bearbeiten: In der neuesten Version von Android M müssen Sie sowohl Lese- als auch Schreibberechtigungen anfordern

0
greywolf82

Die Speichergenehmigung fällt unter eine gefährliche Schutzstufe. Daher werden in Android M nicht alle gefährlichen Schutzstufenberechtigungen zum Installationszeitpunkt erteilt, wenn das App-Ziel-SDK auf 23 gesetzt ist. Sie werden zur Laufzeit angegeben. Ja, und diese Berechtigungen kann auch zur Laufzeit widerrufen werden.

Es wird kein Berechtigungsdialogfeld automatisch ausgelöst. Sie müssen eine Anforderung mit einer API wie der requestPermissions () -Methode ausführen, um diesen systemeigenen Dialog anzuzeigen.

Bitte überprüfen Sie die Berechtigungsliste für gefährliche Level hier

0
dex

Laut den Unterlagen:

Eingeschränkte Berechtigungen bei der Installation: Wenn der Benutzer die App installiert oder aktualisiert, erteilt das System der App alle Berechtigungen, die die App unter PROTECTION_NORMAL anfordert.

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

Da die Ebene von WRITE_EXTERNAL_STORAGE jedoch PROTECTION_DANGEROUS ist, fällt sie unter das in docs beschriebene Verhalten:

Benutzer erteilt Berechtigungen zur Laufzeit: Wenn die App eine Berechtigung anfordert, zeigt das System dem Benutzer ein Dialogfeld an 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, erhält die App alle Berechtigungen im Funktionsbereich dieser Berechtigung, die im App-Manifest deklariert wurden

Hier sind die Quellen für das Schutzniveau:

detaillierte Liste

0
yshahak