Activity.requestPermission与ActivityCompat.requestPermission

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (129)

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

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

  • 有什么区别 Activity.requestPermissions(permissions, requestCode) ActivityCompat.requestPermissions(activity, permissions, requestCode)
  • 我应该使用哪一个?
提问于
用户回答回答于

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

不。低版本没有这样的对话框。它只会调用您的onRequestPermissionsResult()方法让您知道您拥有权限(因为,根据定义,您已经这样做了)。

有什么区别

Activity#requestPermissions()适用minSdkVersion于23或更高版本的应用,或适用于开发人员打电话if (Build.VERSION.SDK_INT >= 23)以避免旧设备上的呼叫的应用。

ActivityCompat.requestPermissions() 适用于任何应用程序,因为它在所有支持的API级别上“做对了”(回到API Level 14 IIRC)。

我应该使用哪一个?

如果您minSdkVersion的年满23岁或以上,请随意使用Activity#requestPermissions()。否则,我建议ActivityCompat.requestPermissions()

用户回答回答于

但为什么还有另一个(ActivityCompat.requestPermissions(...))用于Android 6.0以下?

它的存在是因为AcvivityAndroid,android.app.Activity docsandroid.support.v4.app.ActivityCompatdocs中有两种类型。

  • Activity 适用于min SDK版本为14 iirc的设备
  • ActivityCompat用于向后兼容(SDK 9及更高版本)。它允许您访问可支持的新功能和Material主题,而无需为实现新功能和UI而引入的新OS版本所做的任何重大更改。

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

不,Android 6.0是第一个显示运行时权限对话框,因此以前版本的Android无法显示它们。以前的操作系统iirc实际上忽略了这一段代码。

我应该使用哪一个?

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

扫码关注云+社区

领取腾讯云代金券