我开始制作Kotlin应用,并且试图访问用户位置。这是我的应用程序必须做的所有事情。但是,函数“client.requestLocationUpdates(locationRequest,locationCallback,null)”从不调用我的locationCallback方法,我也不知道为什么。我已经调试了此代码,它执行了“client.requestLocationUpdates(locationRequest,locationCallback,null)”行,但从未执行过我的LocationCallbackFunction。这是我的代码:
class MainActivity : AppCompatActivity() {
private lateinit var client : FusedLocationProviderClient
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
client = LocationServices.getFusedLocationProviderClient(this)
}
override fun onResume() {
super.onResume()
var codigo = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
codigo = 0
when (codigo) {
ConnectionResult.SERVICE_MISSING,
ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED,
ConnectionResult.SERVICE_DISABLED -> {
GoogleApiAvailability.getInstance().getErrorDialog(this, codigo, 0, DialogInterface.OnCancelListener {
fun onCancel(dialog: DialogInterface?) {
finish();
}
}).show()
}
ConnectionResult.SUCCESS -> {
println("Google Play Service is working!")
}
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
println("This app hasn't permission to access users location")
return;
}
val locationRequest = LocationRequest.create()
val fifteen = 15 * 1000.toLong()
val five = 5 * 1000.toLong()
locationRequest.interval = fifteen
locationRequest.fastestInterval = five
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
var builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
var settingsClient = LocationServices.getSettingsClient(this)
settingsClient.checkLocationSettings(builder.build())
.addOnSuccessListener(
fun (locationSettingsResponse : LocationSettingsResponse) {
println("locationSettingsResponse.locationSettingsStates.isGpsPresent = ${locationSettingsResponse.locationSettingsStates.isGpsPresent}")
println("locationSettingsResponse.locationSettingsStates.isGpsUsable = ${locationSettingsResponse.locationSettingsStates.isGpsUsable}")
}
)
.addOnFailureListener(
fun (e: Exception) : Unit {
if (e is ResolvableApiException) {
try {
var resolvable : ResolvableApiException = e
resolvable.startResolutionForResult(this, 10);
} catch (e1 : IntentSender.SendIntentException ) {
}
}
}
)
val locationCallback : LocationCallback? = object : LocationCallback() {
override fun onLocationResult(locationResult : LocationResult?) {
if (locationResult == null) {
println("the value is null")
return;
}
for ( location : Location in locationResult.getLocations()) {
location.getLatitude()
println("latitude=" + location.getLatitude());
textoPrincipal.text = location.getLatitude().toString()
}
}
}
client.requestLocationUpdates(locationRequest, locationCallback, null)
}
}
这就是我 Activity 的全部内容
最佳答案
我解决了这个问题,但我不知道该怎么做,这段代码现在正在完美地运行。我猜这是我的Android Studio配置错误
关于android - requestLocationUpdates不调用locationCallback,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61860833/