Не могу передать переменную в requestPermissions()

Моя деятельность RequiresLocation заключается в запросе разрешения на услуги определения местоположения.

Вот код:

import android.content.pm.PackageManager
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v4.app.ActivityCompat
import android.support.v4.content.ContextCompat
import android.widget.Button
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_requires_location.*
import java.util.jar.Manifest

class RequiresLocation : AppCompatActivity() {

    val requestCode: Int = 1

    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) {
                Toast.makeText(this, "Permission has already been granted", Toast.LENGTH_SHORT).show()
            }
                else {
                    requestLocationPermission()
                }
            }
        }
    }

    private fun requestLocationPermission(): {
        ActivityCompat.requestPermissions(
            RequiresLocation.class,
                    arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
                    requestCode) // coming up in red
    }

однако код запроса отображается красным цветом в Android Studio как неразрешенная ссылка. Почему я не могу передать это? - это потому, что это частная переменная?

Я слежу за официальное руководство по Android для requestPermissions()

Сделайте переменную requestCode постоянной, т. е. const val requestCode: Int = 1 в сопутствующий объект, и используйте экземпляр своей активности, такой как this@RequiresLocation.

Jeel Vankhede 19.01.2019 06:38
0
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте this@RequiresLocation вместо RequiresLocation.class

Попробуй это

 ActivityCompat.requestPermissions(
            this@RequiresLocation,
                    arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
                    requestCode)

Или

private fun requestLocationPermission() {
    ActivityCompat.requestPermissions(
            this,
                    arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
            requestCode) // coming up in red
}

ОБНОВИТЬ

class RequiresLocation : AppCompatActivity() {

    val requestCode: Int = 1

    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) {
                Toast.makeText(this, "Permission has already been granted", Toast.LENGTH_SHORT).show()
            }
            else {
                requestLocationPermission()
            }
        }
    }
    private fun requestLocationPermission() {
        ActivityCompat.requestPermissions(
                this,
                arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
                requestCode) // coming up in red
    }
}
this@RequiresLocation отображается красным цветом, и второй блок кода this также красный. Любая идея?
Zorgan 19.01.2019 06:24

Вот ошибки для обоих примеров: i.imgur.com/crZZ4P2.png, i.imgur.com/XReQppa.png.

Zorgan 19.01.2019 06:33

Спасибо, сработало - была ли проблема в том, что частные функции не могут жить вне класса {}?

Zorgan 19.01.2019 09:05

Другие вопросы по теме