2016-06-23 3 views
0

Ich versuche, dem Benutzer die Möglichkeit zu geben, entweder ein Foto, das sie in der Vergangenheit gemacht haben, zu liefern, oder ein neues Foto sofort zu machen. Das Problem ist, dass wenn ich versuche, das Bild zu verwenden, bekomme ich eine "Erlaubnis verweigert". DieseImage Capture Intent macht Bilddatei unterschiedliche Berechtigungen

ist, wo ich die Auswahl Absicht machen:

final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator); 
root.mkdirs(); 
final String fname = "img_" + System.currentTimeMillis() + ".jpg"; 
outputFileUri = Uri.fromFile(new File(root, fname)); 

Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE_SECURE); 
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 
Intent pickPhotoIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
pickPhotoIntent.setType("image/*"); 

Intent chooserIntent = Intent.createChooser(pickPhotoIntent, "Take a photo or select one from your device"); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] {takePhotoIntent}); 

startActivityForResult(chooserIntent, 1); 

outputFileUri ist eine Feldvariable in der Klasse. Ich benutze das ein Bild zu laden, wie so:

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    /... 
    String url = selectedImageUri.toString(); 
    final Bitmap image = Picasso.with(context).load(url).get(); 

Und ich erhalte eine Fehlermeldung wie folgt:

java.io.FileNotFoundException: /storage/emulated/0/MyDir/img_1466710420779.jpg: open failed: EACCES (Permission denied) 

Dies war früher zu arbeiten, wenn ich es in einer Aktivitätsklasse hatte, aber ich umgewandelt, das zu eine Fragmentklasse und es hat aufgehört zu arbeiten (ich habe nichts anderes verändert - ich habe nur ein Fragment daraus gemacht).

Jeder hat Ideen, wie man das beheben kann?

+0

Es klingt, dass Sie Ihre Aktivitätsinstanz in Ihrem Fragment vermissen. Andernfalls starten Sie die Überwachung, indem Sie den Ordner protokollieren und sehen, was darin enthalten ist. –

+0

Was meinen Sie "Ihre Aktivitätsinstanz in Ihrem Fragment fehlt"? Sollte ich die Aktivität nutzen, um etwas zu tun? – CaptainForge

+0

dh getActivity(). StartActivity (...) oder übergebe diese Instanz von Activity nach Fragment –

Antwort

0

Vielleicht Problem ist in. StartActivityForResult() -Methode. Es gibt keine .onActivityResult() - Methode in Ihrem Code

+0

Dieses zweite Codesegment befindet sich in onActivityResult – CaptainForge

Verwandte Themen