Ich habe eine Klasse, die sich von DialogPreference
erstreckt, die dem Benutzer ermöglicht, aus ihren Kalendern auszuwählen. Ab Android M muss der Benutzer zur Laufzeit die Berechtigung erteilen, dass die App auf die Kalender zugreifen kann. In einem Activity
oder einem Fragment
wäre dies normalerweise relativ einfach: ein Anruf zu ActivityCompat.requestPermissions(Activity [...])
oder FragmentCompat.requestPermissions(Fragment [...])
würde den Trick tun.Wie sollte man Berechtigungen von einer benutzerdefinierten Voreinstellung anfordern?
jedoch in einem DialogPreference
, gibt es keine offensichtliche Möglichkeit, die Activity
oder Fragment
des Zugriffs auf die die DialogPreference
verwendet. Es kann nicht garantiert werden, dass sich getContext()
auf eine Aktivität bezieht, daher kann es unzuverlässig sein, das auf eine Activity
zu übertragen. Die Verwendung von instanceOf
schmilzt von Hässlichkeit und löst nicht das Problem, getContext()
bezieht sich nicht auf Activity
.
getDialog().getOwnerActivity()
sieht vielversprechend aus, gibt aber null zurück, wenn es benötigt wird (z. B. während der DialogPreference
's onBindView()
Methode).
Wie lautet die beste Vorgehensweise zum Anfordern von Berechtigungen, die von einer Preference
benötigt werden? Soll die Anforderung für Berechtigungen vollständig aus dem Preference
entfernt und in der PreferenceFragment
platziert werden?