Ich frage mich, worauf sich das Schlüsselwort this im folgenden Code bezieht (der Codeblock dient dazu, die Erlaubnis zum Zugriff auf den Benutzerstandort anzufordern).

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){
                ...
            }
        }
    }
}

Ich habe die Android-Dokumente auf checkSelfPermission() überprüft und es hat Folgendes:

int checkSelfPermission (Context context, 
                String permission)

Worauf bezieht sich der Kontext hier speziell? Ist es die Anwendung als Ganzes, nicht die Aktivität?

1
Zorgan 17 Jän. 2019 im 23:55

4 Antworten

Beste Antwort

Ich frage mich, worauf sich dieses Schlüsselwort im folgenden Code bezieht

In Ihrem Code-Snippet

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

Das Schlüsselwort this bezieht sich auf die aktuelle Activity Instanz.

Für diejenigen unter uns, die es gewohnt sind, Java-Code zu schreiben: In diesem Fall unterscheidet sich Kotlin von Java.

In Java müssten Sie RequiresLocation.this schreiben, sobald Sie sich im Bereich eines View.OnClickListener befinden.

In Kotlin reicht einfach this. Wenn Sie jedoch mit Android Studio oder IntelliJ Idea arbeiten und die Eingabe durch Eingabe eines @ direkt nach dem this fortsetzen, bietet Ihnen die Code-Vervollständigung this@RequiresLocation, Sie können also sicher sein, dass es sich tatsächlich um das richtige this handelt.

Worauf bezieht sich der Parameter Context in checkSelfPermission()?

Sie können jedes Context übergeben - ein Activity, das Application, aber auch eine Art von Service (beachten Sie, dass Application und Service beide sind erstrecken sich von ContextWrapper, das laut docs sieben direkte und mehr als 40 indirekte Unterklassen, eine davon ist Activity. Alle von ihnen sind gültige Argumente für checkSelfPermission().)

0
Bö macht Blau 18 Jän. 2019 im 17:52

Es bezieht sich auf die aktuelle Instanz der Klasse RequiresLocation .

Voll qualifiziert würde deutlicher lauten wie: RequiresLocation.this

Wie Sie bemerkt haben, erfordert die Signatur von checkSelfPermission einen Kontext , und " this " (die Instanz von RequiresLocation) kann als solcher Kontext übergeben werden Parameter, da alle Aktivitäten vom Kontext abgeleitet sind. Berücksichtigen Sie, dass diese Klasse auch ein Kontext ist, da RequiresLocation von AppCompatActivity abgeleitet ist.

0
PerracoLabs 17 Jän. 2019 im 23:47

Kontext bezieht sich auf den aktuellen Aktivitätsstatus. Wir verwenden den Kontext, um Informationen über den aktuellen Aktivitätsstatus zu erhalten. Sie können auch auf den folgenden Link verweisen, um detaillierte Informationen zum Kontext zu erhalten. https://blog.mindorks.com/understanding-context-in- android-application-330913e32514

0
Android Geek 18 Jän. 2019 im 04:56

Context ist die Schnittstelle zu globalen Informationen über eine Anwendung Umgebung. Dies ist eine abstrakte Klasse, deren Implementierung ist vom Android-System bereitgestellt. Es ermöglicht den Zugriff auf anwendungsspezifische Ressourcen und Klassen sowie Up-Calls für Operationen auf Anwendungsebene wie das Starten von Aktivitäten, Sende- und Empfangsabsichten usw.

Verschiedene Methoden, mit denen Sie context erhalten können

  1. getApplicationContext ()
  2. getContext ()
  3. getBaseContext ()
  4. dies (wenn in der Aktivitätsklasse)

this -> bezieht sich auf den Kontext der aktuellen Aktivität.

0
Sazzad Hissain Khan 26 Feb. 2020 im 04:52