繁体   English   中英

Android checkSelfPermission() 中的“this”指的是什么?

[英]What does "this" refer to in Android checkSelfPermission()?

我想知道下面代码中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)

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

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

获取context不同方法

  1. 获取应用程序上下文()
  2. 获取上下文()
  3. getBaseContext()
  4. 这(在活动课上时)

this -> 指的是当前活动的上下文。

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

在您的代码片段中

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扩展,根据文档,它有七个直接子类和 40 多个间接子类,其中一个是Activity 。所有这些都是checkSelfPermission()有效参数。)

它指的是RequiresLocation类的当前实例

完全合格的会更清楚地阅读: RequiresLocation.this

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM