2016-05-10 8 views
0

Ich verwende die folgenden Codes. Aber nichts passiert, wenn ich auf die Schaltfläche Foto hinzufügen klicke. In den Printls sehe ich Nummer 4 und Nummer 5. Mache ich etwas falsch. Ich verwende den Code in einem Fragment. Jede Hilfe wäre großartig.Android API 23 Read_external_storage Berechtigungsproblem

int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE; 

// define in class 
if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
    System.out.println("number 2"); 
    // We have access. Life is good. 
} else if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)) { 
    System.out.println("number 3"); 
    // We've been denied once before. Explain why we need the permission, then ask again. 
} else { 
    System.out.println("number 4"); 
    // We've never asked. Just do it. 
    ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
    System.out.println("number 5"); 
} 

Der Rückruf ist Teil wie folgt:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     // We got the permission 

     System.out.println("number 6"); 

    } else { 

     System.out.println("number 7"); 

     // We were not granted permission this time, so don't try to show the contact picker 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

Edit:

I wie unten meinen Code Edite, jetzt sehe ich, Nummer 4, 5, 7 und 8 in der println log . Kein Fehler, aber nichts passiert alles. Sollte kein Dialogfeld geöffnet werden, in dem der Benutzer aufgefordert wird, die Berechtigung zu erteilen? Ich benutze nexus 6 mit api 19 als Emulator.

private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 7; 
// define in class 

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) { 
    System.out.println("number 2"); 
    // We have access. Life is good. 
} else if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE)) { 
    System.out.println("number 3"); 
    // We've been denied once before. Explain why we need the permission, then ask again. 
} else { 
    System.out.println("number 4"); 
    // We've never asked. Just do it. 
    requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE); 
    System.out.println("number 5"); 
} 

Der Rückruf Teil ist wie folgt:

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    if (requestCode == MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
     // We got the permission 

     System.out.println("number 6"); 

    } else { 

     System.out.println("number 7"); 

     // We were not granted permission this time, so don't try to show the contact picker 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 

     System.out.println("number 8"); 
    } 
} 

Edit 2:

ich nicht die Erlaubnis hinzugefügt haben zu manifestieren, fügte ich <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> und jetzt scheint es ok.

Antwort

0

MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE muss ein statisches int mit einem Wert to sein, um mehr als eine Berechtigung zu prüfen und ein gültiges Vergleichsergebnis zurückzugeben.

+0

Hallo Mohammad, was sollte der Wert für MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE sein, können Sie ein Beispiel geben, wie man es definiert? Vielen Dank übrigens. – saner

+1

jeder int Sie wollen. Diese Variable wird verwendet, um zwischen verschiedenen Berechtigungen zu unterscheiden. Daher müssen Sie jeder Anfrage einen anderen Wert geben, damit Sie erkennen können, von welcher Antwort Sie erhalten. –

+0

Sie können dies nützlich finden: http://developer.android.com/training/permissions/requesting.html –