如何从自定义首选项请求权限?

时间:2017-09-01 15:04:09

标签: android android-permissions android-preferences preferencefragment

我有一个从DialogPreference延伸的课程,允许用户从他们的日历中进行选择。从Android M开始,用户必须在运行时授予应用程序访问日历的权限。在ActivityFragment中,这通常会相对简单:拨打ActivityCompat.requestPermissions(Activity [...])FragmentCompat.requestPermissions(Fragment [...])即可。

但是,在DialogPreference中,没有明显的方法可以访问使用Activity的{​​{1}}或FragmentDialogPreference无法保证引用活动,因此将其转换为getContext()可能不可靠。使用Activity有点丑陋,并且无法解决instanceOf未引用getContext()的问题。

Activity看起来很有希望,但在需要时会返回null(例如在getDialog().getOwnerActivity()的{​​{1}}方法期间)。

请求DialogPreference所需权限的最佳做法是什么?是否应从onBindView()完全删除权限请求并将其置于Preference

3 个答案:

答案 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)