簡體   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