Falscher positiver Lint-Berechtigungsfehler, auch wenn nach der Erlaubnis zur Laufzeit gefragt wird

8

Mir fällt es schwer, den von Android verwendeten Laufzeitberechtigungsansatz zu verstehen. Für diejenigen, die das lesen, frage ich hier nicht, wie man die Laufzeitberechtigung aufruft. Ich kann ein Erlaubnisdialog zeigen, wenn es nicht bereits gewährt wurde, und es sogar in onRequestPermissionsResult () im Fragment erhalten.

mit diesem Code

%Vor%

Ergebnis in onRequestPermissionsResult

erhalten %Vor%

Code in accessLocation() ist

%Vor%

so weit so gut .. Aber was mich stört, ist, dass ich in meiner accessLocation() Methode einen falschen positiven Fehler in der Zeile bekomme

%Vor%

das sagt

  

Aufruf erfordert eine Berechtigung, die vom Benutzer abgelehnt werden kann: Code sollte explizit prüfen, ob die Berechtigung verfügbar ist (mit checkPermission ) oder explizit mit einem potenziellen SecurityException

umgehen

Ich weiß, das kommt, wenn du nicht nach einer Erlaubnis suchst. Dieser Fehler tritt auf, sobald ich die Methode mit @SuppressWarnings("MissingPermission")

annotiere

Ich weiß nicht, wie Entwickler solche Fehler behandeln, wenn sie die Methode mehrfach in ihrer Klasse aufrufen müssen. entweder muss ich @SuppressWarnings("MissingPermission") oder? (Ich weiß es nicht)

Angenommen, ich beantrage eine Erlaubnis wie im ersten Codeblock oben & gt; Erlaubnisdialog erscheint & gt; Benutzer erteilt Erlaubnis & gt; Der Ablauf geht zu onRequestPermissionsResult und wieder schreibe ich Code für den Zugriff auf den Standort, aber das zeigt mir auch einen falsch positiven Fehler für die Überprüfung der Erlaubnis.

Entweder mache ich etwas Schreckliches oder ich denke, ich habe das Erlaubnismodell missverstanden oder es gibt einen Bug mit Flusen (ich glaube wirklich, das ist nicht das Problem) ..

Ich habe bereits diese Stackoverflow-Frage und dieser Studio Bug , aber ich bin nicht zufrieden mit den Antworten dort.

Bitte sagen Sie mir, was mache ich falsch?

    
Somesh Kumar 05.06.2016, 13:06
quelle

1 Antwort

1

Zunächst einmal: Sie machen nichts falsch. Ihr Code wird wie erwartet funktionieren.

Ich würde empfehlen, die Warnung einfach zu unterdrücken, da dies eindeutig falsch ist.

Wenn Sie jedoch die Lint-Anforderungen erfüllen möchten, müssen Sie Ihren Code in das folgende Schema umgestalten

%Vor%

Ja, dies führt zu einer doppelten Überprüfung, wenn die Berechtigung nicht früher erteilt wurde. Ja, der resultierende Code ist schlecht zu lesen. Aber die Warnung wird weggehen.

Das Laufzeit-Berechtigungssystem ist schrecklich und wir können nichts dagegen tun.

    
F43nd1r 07.06.2016 22:16
quelle