Activity.requestPermissions与ActivityCompat.requestPermissions

时间:2019-06-25 19:47:26

标签: android permissions android-permissions runtime-permissions

运行时权限对话框显示在Android 6.0或更高版本中,因此在API级别23中添加的Activity.requestPermissions(...)很有意义。

但是为什么要在Android 6.0以下的版本中使用另一个(ActivityCompat.requestPermissions(...))?这会在较低版本中显示运行时权限请求对话框吗?


  • 两者之间有什么区别

    Activity.requestPermissions(permissions, requestCode)
    

    ActivityCompat.requestPermissions(activity, permissions, requestCode)
    
  • 我应该使用哪个?

2 个答案:

答案 0 :(得分:2)

  

这是否以较低版本显示运行时权限请求对话框?

不。在较低版本上没有这样的对话框。它将仅调用您的onRequestPermissionsResult()方法以告知您您拥有该权限(因为按照定义,您已经这样做了)。

  

两者之间有什么区别

Activity#requestPermissions()适用于minSdkVersion为23或更高的应用程序,或者其开发人员喜欢调用if (Build.VERSION.SDK_INT >= 23)以避免在较旧设备上调用该应用程序的应用程序。

ActivityCompat.requestPermissions()适用于任何应用程序,因为它在所有受支持的API级别(回到API级别14 IIRC)上都是“做正确的事”。

  

我应该使用哪个?

如果您的minSdkVersion为23或更高,请随时使用Activity#requestPermissions()。否则,我建议使用ActivityCompat.requestPermissions()

答案 1 :(得分:1)

  

但是为什么要在Android 6.0以下的版本中使用另一个(ActivityCompat.requestPermissions(...))?

之所以存在,是因为Android中有Acvivity docsandroid.app.Activity docs这两种类型的android.support.v4.app.ActivityCompat

  • Activity适用于最低SDK版本为14 iirc的设备
  • ActivityCompat用于向后兼容(SDK 9及更高版本)。它使您可以访问可支持的新功能和材料主题,而无需进行新操作系统版本引入的任何重大更改即可实现新功能和用户界面。
  

这是否以较低版本显示运行时权限请求对话框?

不。 Android 6.0是第一个显示运行时权限对话框的应用程序,因此以前的Android版本无法显示它们。以前的OS iirc版本实际上忽略了那段代码。

  

我应该使用哪个?

这完全取决于您使用的Activity类型。如果您的活动是Activity的子级,请使用Activity.requestPermissions(permissions, requestCode)。如果您使用的是ActivityCompat的子级,请使用ActivityCompat.requestPermissions(activity, permissions, requestCode)