0

我有一個課程,從DialogPreference延伸,允許用戶從他們的日曆中進行選擇。從Android M開始,用戶必須在運行時授予應用程序訪問日曆的權限。在ActivityFragment中,這通常會相對簡單:撥打ActivityCompat.requestPermissions(Activity [...])FragmentCompat.requestPermissions(Fragment [...])可以解決問題。如何從自定義首選項請求權限?

但是,在DialogPreference中,沒有明顯的方式訪問使用DialogPreferenceActivityFragmentgetContext()不能保證引用一個活動,因此將其轉換爲Activity可能不可靠。使用instanceOf醜陋的痕跡,並沒有解決getContext()不指Activity的問題。

getDialog().getOwnerActivity()看起來很有希望,但在需要時返回null(例如在DialogPreferenceonBindView()方法中)。

要求Preference所需權限的最佳做法是什麼?應該從Preference中完全刪除權限請求並將其置於PreferenceFragment

回答

1

是否應將對權限的請求從Preference中完全刪除並置於PreferenceFragment中?

恕我直言,是的。或者更準確地說:在顯示偏好之前請求權限。