【问题标题】:What does "this" refer to in Android checkSelfPermission()?Android checkSelfPermission() 中的“this”指的是什么?
【发布时间】:2019-06-12 03:18:52
【问题描述】:

我想知道下面代码中的this 关键字指的是什么(代码块是请求访问用户位置的权限)。

class RequiresLocation : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_requires_location)

        turnOnLocationButton.setOnClickListener {
            if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED){
                ...
            }
        }
    }
}

我查看了checkSelfPermission() 的 Android 文档,它有这个:

int checkSelfPermission (Context context, 
                String permission)

这里的上下文具体指的是什么?是整个应用程序而不是活动?

【问题讨论】:

标签: android kotlin this android-context


【解决方案1】:

我想知道下面代码中的 this 关键字指的是什么

在你的代码sn-p

ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION)
            == PackageManager.PERMISSION_GRANTED

关键字this 指的是当前的Activity 实例。

对于我们这些习惯于编写 Java 代码的人:在这种情况下,Kotlin 与 Java 不同。

在 Java 中,一旦您“进入”View.OnClickListener 的范围内,就必须编写 RequiresLocation.this

在 Kotlin 中,只需 this 即可。但是,如果您正在使用 Android Studio 或 IntelliJ Idea 并通过在 this 之后输入 @ 继续输入,那么代码完成将为您提供 this@RequiresLocation,因此您可以确定确实是正确的this

checkSelfPermission() 中的Context 参数指的是什么?

您可以传入任何Context - 一个ActivityApplication,也可以传入某种类型的Service(注意ApplicationService 都从ContextWrapper 扩展而来,根据docs 有 7 个直接子类和 40 多个间接子类,其中一个是 Activity。它们都是 checkSelfPermission() 的有效参数。)

【讨论】:

  • RequiresLocation.this 将是 this@RequiresLocation
  • @Martin Zeitler - 如果我用 Java 编码并想引用周围的 Activity,它必须是“RequiresLocation.this”。这就是我想说的。我会编辑我的帖子以避免误解
  • 只注意到,Kotlin... 中也有一个等效的限定语法,它指的是it,用于范围本身。
  • @MartinZeitler - 是的,it 似乎指的是 OnClickListener 的 onClick(view:View) 中的“view”参数(我仍然是 Kotlin 初学者,但 Android Studio 的代码完成功能为我提供了很多it. 之后的 View 方法)
【解决方案2】:

它指的是 RequiresLocation 类的当前实例

完全合格的读起来会更清楚,例如:RequiresLocation.this

所以,您注意到 checkSelfPermission 的签名需要 Context,并且可以传递“this”(RequiresLocation 的实例)作为上下文参数,因为所有 Activity 都派生自 Context。 考虑到由于 RequiresLocation 派生自 AppCompatActivity,因此此类也是 Context

【讨论】:

    【解决方案3】:

    上下文指当前活动状态。我们使用上下文来获取当前活动状态的信息。 您还可以参考以下链接以获取有关上下文的详细信息。 https://blog.mindorks.com/understanding-context-in-android-application-330913e32514

    【讨论】:

      【解决方案4】:

      Context 是有关应用程序的全局信息的接口 环境。这是一个抽象类,其实现是 由安卓系统提供。它允许访问 特定于应用程序的资源和类,以及对 应用程序级操作,例如启动活动, 广播和接收意图等。

      获取context的不同方法

      1. getApplicationContext()
      2. getContext()
      3. getBaseContext()
      4. this(在活动类中时)

      this -> 引用当前活动的上下文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-19
        • 2013-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-27
        相关资源
        最近更新 更多