2016-05-30 16 views
2

Ich habe eine App, die die folgende Erlaubnis verwendet:App schreibt auf externe Speicher ohne Erlaubnis

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Ich baue die App für Android 6.0:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     applicationId "de.my.package" 
     minSdkVersion 14 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

Wenn ich jetzt starten Sie die App und schreibe auf den externen Speicher Ich werde nicht um die Erlaubnis für Nexus 5 mit Android 6.0 gebeten, auch wenn ich die Erlaubnis nicht eingestellt habe:

enter image description here

Warum und wie kann die App ohne Erlaubnis auf den externen Speicher schreiben?

+0

Die Anwendung wird nicht auf externen Speicher schreiben (Sie müssen überprüfen, ob die App etwas in den ext.storage geschrieben hat), auch wird es Sie nicht um die Erlaubnis fragen, bis Sie es selbst anfordern –

+0

Ja natürlich Es fragt nicht, ob es nicht erzwungen wird. Aber die App würde aufgrund fehlender Berechtigungen Ausnahmen auslösen, was sie nicht tut. Und ja. Die App schreibt tatsächlich in den externen Speicher. Ich habe das überprüft. – Mulgard

+0

vielleicht überprüfen Sie 'android.Manifest.permission.WRITE_EXTERNAL_STORAGE''in wenn Aussage in Ihrer Klasse –

Antwort

3

In Eibisch benötigen Sie Berechtigungen zur Laufzeit fragen, Nur wenn die Berechtigung Benutzer grand Sie die Vorgänge wie WRITE_EXTERNAL_STORAGE tun können

können Sie Berechtigungen fragen wie diese

if (ContextCompat.checkSelfPermission(thisActivity, 
                Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) { 

     //request for the permission 
        ActivityCompat.requestPermissions(thisActivity, 
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 
                MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); 

        // MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE is an 
        // app-defined int constant. The callback method gets the 
        // result of the request. 
    
} 

Sie müssen Methode außer Kraft setzen onRequestPermissionsResult um zu überprüfen, ob die Berechtigung gewährt ist oder nicht

@Override 
     public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
         switch (requestCode) { 
             case MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: { 
                 // If request is cancelled, the result arrays are empty. 
                 if (grantResults.length > 0 
                     && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

                     // permission was granted, yay! Do the 
                     // write to external strage operations here 

                 } else { 

                     // permission denied, boo! Disable the 
                     // functionality that depends on this permission. 
         /*You can forcefully again ask for the permissions to the user here but it is a bad practice*/ 
                 } 
                 return; 
             } 

             // other 'case' lines to check for other 
             // permissions this app might request 
         } 
     } 

Ich denke in Marshmallow ohne Benutzer granding die Erlaubnis Sie werden die Erlaubnis nicht bekommen.
Wenn Sie die App ohne fragen und granding Erlaubnis in Marshmallow ausführen möchten, dann ändern Sie Ihre Ziel-SDK-Version von 23 bis 22 in Ihrer App Level Gradle, aber in diesem Fall werden Sie nicht die Funktionen von Marshmallow erhalten.

+0

Vielen Dank für Ihre Arbeit, aber ich weiß das schon. Das Problem ist, dass die App in der Lage ist, auf externen Speicher zu schreiben, ohne die Erlaubnis zu haben. – Mulgard

+0

Wenn der Benutzer die Berechtigung READ_EXTERNAL_STORAGE zugelassen hat, wird er nicht erneut nach WRITE_EXTERNAL_STORAGE fragen. Ist dies der Fall? –

+0

nein, nicht der Fall. Ich kenne die Berechtigungsgruppen. – Mulgard