我有一個課程,從DialogPreference
延伸,允許用戶從他們的日曆中進行選擇。從Android M開始,用戶必須在運行時授予應用程序訪問日曆的權限。在Activity
或Fragment
中,這通常會相對簡單:撥打ActivityCompat.requestPermissions(Activity [...])
或FragmentCompat.requestPermissions(Fragment [...])
可以解決問題。如何從自定義首選項請求權限?
但是,在DialogPreference
中,沒有明顯的方式訪問使用DialogPreference
的Activity
或Fragment
。 getContext()
不能保證引用一個活動,因此將其轉換爲Activity
可能不可靠。使用instanceOf
醜陋的痕跡,並沒有解決getContext()
不指Activity
的問題。
getDialog().getOwnerActivity()
看起來很有希望,但在需要時返回null(例如在DialogPreference
的onBindView()
方法中)。
要求Preference
所需權限的最佳做法是什麼?應該從Preference
中完全刪除權限請求並將其置於PreferenceFragment
?