Bevor ich beginne, meine Frage zu erklären, muss ich erwähnen, dass ich neu in Android-Entwicklung bin.Zugriff auf externen Speicher verweigert in AndroidTest
Ich versuche, ein Programm für Android zu schreiben, das OpenCV Java API für einige Datenverarbeitung verwendet. Ich entwickle Komponententests für Klassen, die Algorithmen implementieren, und diese Klassen sind noch mit keiner Aktivität verbunden. Mit anderen Worten, ich möchte nur die Funktionalität von Methoden testen, bevor ich mit Aktivitäten zu tun habe.
Da ich Zugriff auf OpenCV-Bibliotheken haben muss, habe ich meinen Unit-Test unter androidTest in Android Studio geschrieben. Die Dateien, die Daten enthalten und im Programm gelesen werden müssen, werden nach/sdcard/DIR und/storage/emulated/0/DIR kopiert. Ich habe AndroidManifest.xml die folgende Berechtigung hinzugefügt, um Zugriff auf externen Speicher zu gewähren.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Allerdings, wenn ich versuche, Dateien von externen Speichern zu lesen bekomme ich open failed: EACCES (Permission denied)
. Beachten Sie, dass ich den von Environment.getExternalStorageDirectory().getAbsolutePath()
zurückgegebenen Pfad mit dem Namen der Datendateien verkette und später den Inhalt der Dateien mit FileInputStream
lese.
Ich habe ähnliche Fragen und Antworten gesehen, die erwähnen, dass der Zugriff zur Laufzeit für APIs über 23 gewährt werden sollte. Da ich jedoch keine Aktivitäten für meine Methoden habe, kann ich zur Laufzeit keine Berechtigung anfordern.
Gibt es weitere Verzeichnisse, die ich verwenden kann, um meine Datendateien zu platzieren, für die diese Berechtigungen nicht erforderlich sind? Ich dachte an
assets
als eine Option, aber ich gehe davon aus, dass Assets in der endgültigen apk sind und wenn ich Dateien für eine andere Daten ändern muss, muss ich jedes Mal eine neue apk erstellen.Wie sollte ich den Zugriff auf/sdcard gewähren, ohne irgendwelche Aktivitäten zu haben, die den Benutzer zur Laufzeit um Erlaubnis fragen?
Kann ich lokale Tests anstelle von androidTest durchführen, indem ich OpenCV-Bibliotheken auf meiner Linux-Maschine installiere?
Wie könnte die Erlaubnis gewährt werden, ohne eine UI zu haben? Anforderungen nicht erforderlichPermissions erfordern eine Benutzeroberfläche? – Mahdi
Es war möglich für frühere Versionen von Android, aber nach Marshmallow-Berechtigungen wird dynamisch und nicht während der Installation gefragt –