2016-10-07 2 views
0

Ich möchte Bild auszuwählen und es in der Datenbank zu speichern, wenn das Auswahlbild aus der Galerie geben Sie mir Ausnahme:java.lang.SecurityException: Permission Denial: Lesen com.android.providers.media.MediaProvider

enter image description here

die Fehler in onSelectFromGalleryResult Methode:

@Override 
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
     switch (requestCode) { 
      case Utility.MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: 
       if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
        if(userChoosenTask.equals("Take Photo")) 
         cameraIntent(); 
        else if(userChoosenTask.equals("Choose from Library")) 
         galleryIntent(); 
       } else { 
      } 
      break; 
    } 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == SELECT_FILE) 
      onSelectFromGalleryResult(data); 
     else if (requestCode == REQUEST_CAMERA) 
      onCaptureImageResult(data); 
    } 
} 
@SuppressWarnings("deprecation") 
private void onSelectFromGalleryResult(Intent data) { 
    Bitmap bm=null; 
    if (data != null) { 


     try { 
    ##  bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());## 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    ivImage.setImageBitmap(bm); 
}` 

Manifest-Datei

+1

Add Berechtigung Lesen und Schreiben External Speicher in Ihrem Manifest ....... – sushildlh

Antwort

1

gibt Erlaubnis in Manifest-Datei über den Antrag Tag

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

Ab Android 6.0 (API-Ebene 23), gewähren Benutzern Berechtigungen für Anwendungen, während die App ausgeführt wird, nicht, wenn sie die App installieren.

Im Folgenden wird die Methode zum Überprüfen und Anfordern von Berechtigungen beschrieben. Die Verwendung der Support-Bibliothek ist jedoch einfacher, da Ihre App vor dem Aufruf der Methoden nicht überprüfen muss, auf welcher Android-Version sie ausgeführt wird.

Für weitere Informationen, lesen Sie in diesem Official documentation

Deklarieren Erlaubnis zu prüfen,

private static final int REQUEST_STORAGE_PERMISSIONS = 1; 
private static final String[] STORAGE_PERMISSIONS = { 
     Manifest.permission.READ_EXTERNAL_STORAGE, 
}; 

Unten Funktion prüft, ob die Erlaubnis erteilt wird,

private boolean hasPermissionsGranted(String[] permissions) { 
    for (String permission : permissions) { 
     if (ActivityCompat.checkSelfPermission(getActivity(), permission) 
       != PackageManager.PERMISSION_GRANTED) { 
      return false; 
     } 
    } 
    return true; 
} 

Verwenden oben Funktion Zielcode, für den eine kritische Berechtigung erteilt werden muss, ist hier der entsprechende Code -

if (!hasPermissionsGranted(STORAGE_PERMISSIONS)) { 
     requestPermissions(); 
     return; 
    } 

Nun, hier ist der eigentliche Code, die Erlaubnis Dialog löst die Erlaubnis von Benutzer zu gewähren,

private void requestPermissions() { 
    if (shouldShowRequestPermissionRationale(STORAGE_PERMISSIONS)) { 
     showPermissionDialog(); // Dialog to describe user how permission is important 
    } else { 
     requestPermissions(STORAGE_PERMISSIONS, REQUEST_STORAGE_PERMISSIONS); 
    } 
} 

Nun Behandeln Sie die Berechtigungen Anforderungsantwort,

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 
             @NonNull int[] grantResults) { 
    if (requestCode == REQUEST_STORAGE_PERMISSIONS) { 
     if (grantResults.length == STORAGE_PERMISSIONS.length) { 
      boolean isGranted = true; 
      for (int result : grantResults) { 
       if (result != PackageManager.PERMISSION_GRANTED) { 
        isGranted = false; // You can tell user that critical permission denied 
        break; 
       } 
      } 
      if (isGranted) { // perform that critical operation here... } 
     } else { 
      // Tell user that critical permission denied 
     } 
    } else { 
     super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 
+0

Ich mache das aber nichts, das Problem in dieser Zeile bm = MediaStore.Images.Media.getBitmap (getApplicationContext(). GetContentResolver(), data.getData()); –

+0

Zielen Sie auf v24? – Wizard

+0

Setzen Sie Ihre volle Stack-Trace, ich muss schauen, was der tatsächliche Fehler ist. Denn dies scheint eine Berechtigungsverweigerung von Android M und der oberen Version zu sein. – Wizard

Verwandte Themen