【问题标题】:What is the correct usage of "this" in Android Studio - ActivityCompat.requestPermissions?Android Studio - ActivityCompat.requestPermissions 中“this”的正确用法是什么?
【发布时间】:2017-05-19 01:19:06
【问题描述】:

在使用以下方法时,Android Studio 在关键字“this”上生成以下错误:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_READ_FINE_LOCATION);

错误:

第一个参数类型错误...找到 com.websmithing.wp.gpstracker.LocationService,需要 android.app。活动

在评估清单文件权限检查时,我可以使用“this”引用活动,而不会出现任何错误。

ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)   !=
  PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) !=
  PackageManager.PERMISSION_GRANTED) {

谁能指出我正确的方向?

【问题讨论】:

    标签: android android-studio-2.0


    【解决方案1】:

    注意错误信息。它为您指明了解决方案。

    错误的第一个参数类型...找到 com.websmithing.wp.gpstracker.LocationService,需要 android.app。 活动

    这意味着ActivityCompat.requestPermissions() 期望 Activity 作为第一个参数,但您提供的是 LocationService 实例。我猜你是从内部类调用它,那么也许你必须使用WhateverYouActivityClassIs.this 来引用外部类。

    【讨论】:

    • 是的,我从内部类调用。我想我只是不明白为什么引用“this”适用于 checkSelfPermissions 作为有效的活动,但不适用于请求代码......我在网上研究过的所有示例都使用“this”作为有效形式......
    • 我相信我的问题是我从中调用请求权限的内部类扩展了服务类而不是活动。因此参考 mainActivity.this 也不起作用。
    【解决方案2】:

    this 指的是当前类。它仅适用于this,当您在请求权限的活动中。

    解决方案

    从服务发送通知,以便当用户单击它时,打开 活动并请求您需要的权限。

    如何发送通知?

    简单参考Building a Notification

    【讨论】:

      【解决方案3】:

      您必须在调用类的活动中编写checkSelfpermission 代码。

      【讨论】:

      • 你能解释一下你的答案并举个例子吗?
      • 虽然这可能是解决问题的宝贵提示,但一个好的答案也可以证明解决方案。请edit 提供示例代码来说明您的意思。或者,请考虑将其写为评论。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 2016-08-28
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      相关资源
      最近更新 更多