Моя деятельность 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()
Используйте 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 также красный. Любая идея?
Вот ошибки для обоих примеров: i.imgur.com/crZZ4P2.png, i.imgur.com/XReQppa.png.
Спасибо, сработало - была ли проблема в том, что частные функции не могут жить вне класса {}?
Сделайте переменную
requestCodeпостоянной, т. е.const val requestCode: Int = 1в сопутствующий объект, и используйте экземпляр своей активности, такой какthis@RequiresLocation.