7

Ich entwickle eine benutzerdefinierte Compound-Ansicht, die auf externen Speicher zugreifen muss. Wie kann ich die Berechtigungsbehandlung implementieren, ohne externe Parteien einzubeziehen, d. H. Aktivität oder Fragment?Wie werden Berechtigungsanfragen außerhalb von Aktivitäten und Fragmenten behandelt?

Ich bekomme, dass ich die Berechtigungen über den Kontext der Ansicht anfordern kann, aber wie kann ich onRequestPermissionsResult() in der Ansicht behandeln? Ist es überhaupt möglich?

Wenn es nicht möglich ist, was wäre die eleganteste Lösung, um so etwas zu handhaben?

Antwort

5

Ich bin eine benutzerdefinierte Verbindung anzeigen zu entwickeln, die externen Speicher

IMHO zugreifen muss, das ist eine Architektur Bug. A View dient zum Anzeigen von Material für den Benutzer und manchmal zum Sammeln von Eingabeereignissen auf niedriger Ebene und zum Umwandeln derselben in Konstrukte höherer Ordnung (z. B. Klicks, Wischen). A View sollte keine Verbindung zu Dateien, Datenbanken usw. haben. Siehe die MVC-, MVP-, MVVM- und ähnliche GUI-Architekturmuster.

WebView, die sich nicht daran hält, verursacht als Ergebnis Probleme (z. B. Datenträger E/A auf dem Hauptanwendungs-Thread).

Wie kann ich die Berechtigungsbehandlung implementieren, ohne externe Parteien einzubeziehen, d. H. Aktivität oder Fragment?

Sie können nicht. Es liegt in der Verantwortung der Aktivität oder des Fragments, die Erlaubnis zu beantragen, vermutlich bevor Ihre Ansicht diese Daten benötigt.

Was wäre die eleganteste Lösung, um so etwas zu handhaben?

Extrahieren Sie die Datenzugriffs Teil dieses View in etwas anderes, das durch die Aktivität oder das Fragment verwaltet wird, wo das Einfädeln, Berechtigungen und andere mit dieser Datenzugriff zugeordnet Arbeit verwaltet werden können.

-1

Dies ist nur in Aktivitäten und Fragmente möglich.

Sie können public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) in Ihre Ansicht kopieren und diese Methode in der entsprechenden Aktivität oder in dem Fragment aufrufen, in dem sich der Kontext befindet.