2

Ich versuche, eine Laufzeitberechtigung mit Android 6.0 anzufordern. Dies ist mein Code:Berechtigung READ_EXTERNAL_STORAGE wird immer verweigert

private void enablePermission() { 
    String[] PERMISSIONS = { Manifest.permission.READ_EXTERNAL_STORAGE}; 

    if (!hasPermissions(this, PERMISSIONS)) { 
     ActivityCompat.requestPermissions(this, PERMISSIONS, 
       PERMISSION_ALL); 
    } 
} 


public static boolean hasPermissions(Context context, String... permissions) { 

    for (String permission : permissions) { 
     if (ContextCompat.checkSelfPermission(context, permission) != 
       PackageManager.PERMISSION_GRANTED) { 
      return false; 
     } 
    } 

    return true; 
} 


@Override 
public void onRequestPermissionsResult(int requestCode, String[] 
     permissions, int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_ALL: 
      if (grantResults.length > 0 && grantResults[0] == 
        PackageManager.PERMISSION_GRANTED) { 
       Log.d("Permission", "Granted"); 
      } else { 
       Log.d("Permission", "Denied"); 
      } 
    } 
} 

Es ist immer meine "Zugriff verweigert" erzählt in onRequestPermissionsResult. Ich habe diesen Code mit ACCESS_FINE_LOCATION versucht und es hat funktioniert.

Antwort

0

Ich löste mein Problem durch Neustart meines virtuellen Geräts in Genymotion.

3

Versuchen Sie, das Android-Paket auf Ihre Berechtigungen hinzuzufügen. So etwas wie dies (dies ist für das Schreiben von externer Speicher):

public boolean isStoragePermissionGranted() { 
    if (Build.VERSION.SDK_INT >= 23) { 
     if (checkSelfPermission(android.Manifest.permission. READ_EXTERNAL_STORAGE) 
       == PackageManager.PERMISSION_GRANTED) { 
      Log.v(TAG,"Permission is granted"); 
      return true; 
     } else { 

      Log.v(TAG,"Permission is revoked"); 
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission. READ_EXTERNAL_STORAGE}, 1); 
      return false; 
     } 
    } 
    else { //permission is automatically granted on sdk<23 upon installation 
     Log.v(TAG,"Permission is granted"); 
     return true; 
    } 


} 

für Rückruf:

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
     if(grantResults[0]== PackageManager.PERMISSION_GRANTED){ 
      Log.v(TAG,"Permission: "+permissions[0]+ "was "+grantResults[0]); 
      //resume tasks needing this permission 
     } 
    } 

Sie zu diesem SO answer für weitere Informationen verweisen.