421 Stimmen

Exception 'open failed: EACCES (Berechtigung verweigert)' auf Android

Ich bekomme

öffnen fehlgeschlagen: EACCES (Permission denied)

auf der Linie OutputStream myOutput = new FileOutputStream(outFileName);

Ich habe die Wurzel überprüft und versucht android.permission.WRITE_EXTERNAL_STORAGE .

Wie kann ich dieses Problem beheben?

try {
    InputStream myInput;

    myInput = getAssets().open("XXX.db");

    // Path to the just created empty db
    String outFileName = "/data/data/XX/databases/"
            + "XXX.db";

    // Open the empty db as the output stream
    OutputStream myOutput = new FileOutputStream(outFileName);

    // Transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = myInput.read(buffer)) > 0) {
        myOutput.write(buffer, 0, length);
    }

    // Close the streams
    myOutput.flush();
    myOutput.close();
    myInput.close();
    buffer = null;
    outFileName = null;
}
catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

0voto

user3561494 Punkte 2044

Aufbauend auf der Antwort von user462990

Um benachrichtigt zu werden, wenn der Benutzer auf den Dialog zur Erlaubnisanfrage antwortet, verwenden Sie Folgendes: (Code in kotlin)

override fun onRequestPermissionsResult(requestCode: Int,
                                        permissions: Array<String>,
                                        grantResults: IntArray) {
    when (requestCode) {
        MY_PERMISSIONS_REQUEST_READ_CONTACTS -> {
            // If request is cancelled, the result arrays are empty.
            if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

            } else {

                // permission denied, boo! Disable the
                // functionality that depends on this permission.

            }
            return
        }

        // Add other 'when' lines to check for other
        // permissions this app might request.

        else -> {
                // Ignore all other requests.
        }   
    }
}

0voto

ethemsulan Punkte 2191

Gradle-Abhängigkeiten hinzufügen

implementation 'com.karumi:dexter:4.2.0'

Fügen Sie den folgenden Code in Ihre Hauptaktivität ein.

import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);

    new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {

                checkMermission();
            }
        }, 4000);
    }

    private void checkMermission(){
        Dexter.withActivity(this)
                .withPermissions(
                        android.Manifest.permission.READ_EXTERNAL_STORAGE,
                        android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        android.Manifest.permission.ACCESS_NETWORK_STATE,
                        Manifest.permission.INTERNET
                ).withListener(new MultiplePermissionsListener() {
            @Override
            public void onPermissionsChecked(MultiplePermissionsReport report) {
                if (report.isAnyPermissionPermanentlyDenied()){
                    checkMermission();
                } else if (report.areAllPermissionsGranted()){
                    // copy some things
                } else {
                    checkMermission();
                }

            }
            @Override
            public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                token.continuePermissionRequest();
            }
        }).check();
    }

0voto

user13107 Punkte 2929

Ich hatte das gleiche Problem (API >= 23).

Die Lösung https://stackoverflow.com/a/13569364/1729501 funktionierte bei mir, aber es war nicht praktikabel, die Anwendung für die Fehlersuche zu trennen.

Meine Lösung bestand darin, den richtigen adb-Gerätetreiber unter Windows zu installieren. Der Google-USB-Treiber hat für mein Gerät nicht funktioniert.

SCHRITT 1: Laden Sie die adb-Treiber für Ihr Gerät herunter.

SCHRITT 2: Gehen Sie zum Gerätemanager -> andere Geräte -> suchen Sie nach Einträgen mit dem Wort "adb" -> wählen Sie Treiber aktualisieren -> geben Sie den Ort aus Schritt 1 an

-1voto

Harman Khera Punkte 226

Erlaubnis im Manifest hinzufügen.

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

-2voto

Hamid-Ghasemi Punkte 47

Dies zum Manifest hinzufügen, aber diese Erlaubnis hat eine Google Play-Richtlinie.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X