it-swarm.com.de

BitmapFactory: Stream kann nicht dekodiert werden: Java.io.FileNotFoundException

Ich habe ein Problem bezüglich der BitMapFactory.decodeFile.

In meiner App möchte ich, dass der Benutzer ein Bild von seinem/ihrem Gerät auswählen oder ein Foto machen kann. Diese muss dann in einer ImageView angezeigt werden

Hier ist ein Codeausschnitt:

Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
                    cursor.moveToFirst();
                    int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                    String picturePath = cursor.getString(columnIndex);
                    cursor.close();
                    MyImage image = new MyImage();
                    image.setTitle("Test");
                    image.setDescription("test choose a photo from gallery and add it to " + "list view");
                    image.setDatetime(System.currentTimeMillis());
                    image.setPath(picturePath); 

Und ich bekomme diese Ausnahme:

BitmapFactory: Unable to decode stream: Java.io.FileNotFoundException: /storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20170302-WA0012.jpg: open failed: EACCES (Permission denied)

Wie man es löst. Bitte helfen Sie mir. Danke im Voraus .. 

4
Monali

Das Problem mit der Berechtigung. Sie müssen dem Manifest die Berechtigung für die externe Lese-Speicherung hinzufügen, nachdem Sie es verwenden können. Wenn Sie os über 6.0 verwenden, müssen Sie die Berechtigung Easy verwenden.

Für schreiben: 

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

Für lesen: 

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />

Über 6.0:

private String[] galleryPermissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};

if (EasyPermissions.hasPermissions(this, galleryPermissions)) {
            pickImageFromGallery();
        } else {
            EasyPermissions.requestPermissions(this, "Access for storage",
                    101, galleryPermissions);
        }
15
Jd Prajapati

Sie haben eine Laufzeitberechtigung für die READ-EXTERNAL-Speicherung, wenn Sie Ihre CAMERA-Absicht starten:

final int MyVersion = Build.VERSION.SDK_INT;
        if (MyVersion > Build.VERSION_CODES.Lollipop_MR1) {
            if (!checkIfAlreadyhavePermission()) {
                ActivityCompat.requestPermissions(new String[]{Android.Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            } else {
               startYourCameraIntent();
            }
        }

checkIfAlreadyhavePermission () -Methode:

private boolean checkIfAlreadyhavePermission() {
        int result = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
        return result == PackageManager.PERMISSION_GRANTED;
    }

Berechtigungsdialog behandeln Schaltfläche "Zulassen" und "Ablehnen" in onRequestPermission ():

@Override
        public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
            super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case 1: {
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                   startYourCameraIntent();

                } else {
                    Toast.makeText(getActivity(), "Please give your permission.", Toast.LENGTH_LONG).show();
                }
                break;
            }
        }
    }

Und fügen Sie das zu Ihrem Manifest-Anwendungs-Tag hinzu:

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
1
tahsinRupam