Ich habe Probleme mit dem manuellen Prozess hinter der Beantragung von Berechtigungen bekommen (bin einfach weiter in den "verweigerten" Code gefallen), also bin ich zur Vereinfachung mit Dexter übergegangen. Ich habe den folgenden Code in onCreate () implementiert und eine Neuinstallation der App durchgeführt:
%Vor%Es fällt sofort in die "VERWEIGERT!" log, und es fordert mich nie auf. Ich habe diesen speziellen Code versucht, um mehrere Berechtigungen zu versuchen (was letztendlich das ist, was ich tun muss):
%Vor%Er fordert die Berechtigung zum Aufzeichnen von Audio auf und fragt dann nach Zugriff auf Fotos / Medien / Dateien auf dem Gerät (es fragt nie nach Kamera). Dann, wenn das erledigt ist, wird das Protokoll gedruckt: "Accepted 3 | Denied: android.permission.CAMERA". Es leugnet es, ohne mich sogar noch einmal zu fragen.
Mein Manifest ist so eingestellt, dass CAMERA an der richtigen Stelle (außerhalb des Tags 'application') steht. Siehe unten als Referenz:
%Vor%Seltsame Sache ist, dass, wenn ich in Einstellungen gehe & gt; Anwendungen & gt; MyApp, die Option Kamera wird dort nicht angezeigt.
Ich glaube nicht, dass es ein Problem mit Dexter ist, da es im Grunde dasselbe macht, wenn ich es manuell einstelle (und ich habe bestätigt, dass es in diesem Fall definitiv eingerichtet ist, nachdem ich ein paar Top-SO-Posts gesehen habe) / p>
Irgendwelche Gedanken dazu, was das Problem hier sein könnte? FYI - Ich benutze ein Galaxy S6, OS 6.0.2. Die anderen Benutzer, die dies erfahren, scheinen andere Geräte mit 6.0+ OS zu sein. Vielen Dank im Voraus!
BEARBEITEN: Das Testen verschiedener Geräte funktioniert auf einigen und funktioniert bei einigen nicht:
Scheint kein solides Muster zu sein. Definitiv seltsam. Ich habe auch ein brandneues Projekt gestartet und den gleichen Code ausgeführt - funktionierte gut und erlaubte den Zugriff auf meine Kamera. Es scheint also nicht vollständig gerätespezifisch zu sein.
Es stellte sich heraus, dass das Problem damit eine Bibliothek eines Drittanbieters war, die diese Zeile in ihrem Manifest hatte und unsere eigene Erlaubnis außer Kraft setzte:
%Vor%Die Lösung bestand darin, ihr Projekt entweder manuell als Modul zu importieren (anstatt sie zu verwenden), und dann diese Zeile zu kommentieren ODER einfacher - Sie können "tools: node=" replace "" am Ende der Zeile hinzufügen Hauptprojekt CAMERA Erlaubnislinie, und es funktioniert gut danach; Das Projekt muss nicht mit diesem Ansatz importiert werden.
Was Sie brauchen, sind native Laufzeitberechtigungen, nicht dexter. Ab Android 6.0 (API-Stufe 23) gewähren Benutzer Berechtigungen für Anwendungen, während die App läuft, und nicht, wenn sie die App installieren. Dieser Ansatz optimiert den App-Installationsprozess, da der Benutzer keine Berechtigungen erteilen muss, wenn er die App installiert oder aktualisiert. Es gibt dem Benutzer auch mehr Kontrolle über die Funktionalität der App. Beispielsweise könnte ein Benutzer einer Kamera-App den Zugriff auf die Kamera, nicht aber den Standort des Geräts gewähren. Der Benutzer kann die Berechtigungen jederzeit auf dem Bildschirm Einstellungen der App widerrufen.
%Vor%
// Assume thisActivity is the current activity int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.YOUR_PERMISSION);
Dann müssen Sie eine bestimmte Berechtigung anfordern, wenn diese Prüfung falsch ist,
Bare in ind, dass Sie sie auch im Manifest deklarieren müssen, basierend auf dem, was Sie gezeigt haben, dass das noch nicht geschehen ist. Weitere Informationen .
Tags und Links android android-camera android-externalstorage