【发布时间】:2020-02-18 17:43:53
【问题描述】:
我在我的项目中使用Fused Location Provider API 来获取device location。当定位服务关闭时,它会显示alert dialog,要求用户打开它。
有没有办法自定义此警报对话框以显示不同的消息?
代码:
LocationServices.getSettingsClient(this)
.checkLocationSettings(locationRequestBuilder.build())
.addOnCompleteListener {
try {
it.getResult(ApiException::class.java)
// Location settings are On
} catch (exception: ApiException) { // Location settings are Off
when (exception.statusCode) {
RESOLUTION_REQUIRED -> try { // Check result in onActivityResult
val resolvable = exception as ResolvableApiException
resolvable.startResolutionForResult(this, LOCATION_REQUEST_CODE)
} catch (ignored: IntentSender.SendIntentException) {
} catch (ignored: ClassCastException) {
}
// Location settings are not available on device
}
}
}
【问题讨论】:
-
您无法更改对话框。这是谷歌的事情。但是您可以检测服务是否已关闭并选择显示一个对话框,要求用户转到设置并为您启用它(或者如果您愿意,您可以将用户发送到设置)。但是该对话框的存在是为了防止恶意应用程序在没有用户干预的情况下静默启用定位服务。据我记得,您无法从您的代码中打开定位服务,您可以 - 最好 - 将用户发送到设置,以便她/他可以代表您执行此操作。
-
我见过可以从自定义警报对话框自动启用位置服务的应用程序(例如三星手机上的默认天气应用程序)。
-
我没有三星设备(对此我很高兴),但如果默认三星应用正在这样做,在三星手机上,那么这就是你的提示:他们可以做任何他们想做的事,只要他们控制他们的硬件和大部分软件。众所周知,三星在 Android 上做了很多聪明而愚蠢的事情。这也可能是三星所做的事情。在非三星手机上尝试相同的应用程序。 ;-)
-
我做了,但它没有帮助我做我想做的事,所以我决定把这个作为一个单独的问题发布。
标签: android kotlin android-location fusedlocationproviderapi android-fusedlocation