我有一个从DialogPreference
延伸的课程,允许用户从他们的日历中进行选择。从Android M开始,用户必须在运行时授予应用程序访问日历的权限。在Activity
或Fragment
中,这通常会相对简单:拨打ActivityCompat.requestPermissions(Activity [...])
或FragmentCompat.requestPermissions(Fragment [...])
即可。
但是,在DialogPreference
中,没有明显的方法可以访问使用Activity
的{{1}}或Fragment
。 DialogPreference
无法保证引用活动,因此将其转换为getContext()
可能不可靠。使用Activity
有点丑陋,并且无法解决instanceOf
未引用getContext()
的问题。
Activity
看起来很有希望,但在需要时会返回null(例如在getDialog().getOwnerActivity()
的{{1}}方法期间)。
请求DialogPreference
所需权限的最佳做法是什么?是否应从onBindView()
完全删除权限请求并将其置于Preference
?
答案 0 :(得分:1)
恕我直言,是的。或者,更准确地说:在显示首选项之前请求权限。是否应从Preference中完全删除权限请求并将其置于PreferenceFragment中?
答案 1 :(得分:0)
我的项目TestPreferenceFragment extends PreferenceFragment{...}
。
请勿回调onRequestPermissionsResult
,当我使用操作时:
getActivity().requestPermissions(……)
ActivityCompat.requestPermissions(getActivity(),……)
然后我通过以下方式修复它:PreferenceFragment.requestPermissions()
答案 2 :(得分:0)
在片段中,仅需使用权限即可
requestPermissions(permissionList, REQUEST_CODE)
代替
ActivityCompat.requestPermission(Activity, String[], int)