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中?

恕我直言,是的。或者更准确地说:在显示偏好之前请求权限。