所以我有一个应用。这取决于用户位置。正如我所期望的,在许多设备上它运行良好。三星s8存在问题,我检查了来自不同用户和需要位置的不同应用的4个真实s8,并且那里存在问题。 但是现在我的小米mi a1(带有干净的android)获得了android安全更新(11月8.1日),并且遇到了与s8相同的问题。
问题: 我在设备的设置中关闭了位置服务。我启动了我的应用程序,或者需要位置的其他应用程序(不是Google地图,它的确很棒)。 我得到默认系统对话框以打开位置服务。我按“确定”,一次它启动所有来源的位置服务,另一次它仅启动gps。 “仅GPS”的效果非常差,我等了一两分钟,它没有给出我的位置,也没有在地图上设置蓝点。我关闭位置并关闭应用程序,再次打开此对话框,然后单击“确定”,它将启动所有源,然后我立即获得位置。
据我了解,将在开始位置服务上设置的模式取决于LocationRequest的优先级。那么,为什么要一次将模式设置为“所有源”,而一次将模式设置为“仅GPS”,则其大约为LocationRequest.PRIORITY_HIGH_ACCURACY
。如果我尝试在所有检查过的设备上使用LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
(这是s8的默认设置),它将启动“ wifi和其他网络”模式,但始终处于同一模式。
我使用FusedLocationClient。 我的代码来启动系统对话框:
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(getLocationRequest());
builder.setAlwaysShow(true);
SettingsClient client = LocationServices.getSettingsClient(this);
Task<LocationSettingsResponse> task = client.checkLocationSettings(builder.build());
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
if (e instanceof ResolvableApiException) {
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
ResolvableApiException resolvable = (ResolvableApiException) e;
resolvable.startResolutionForResult(MapsActivity.this,
REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sendEx) {
// Ignore the error.
if (sendEx.getMessage() != null) {
Crashlytics.logException(new RuntimeException("startGpsService: " + sendEx.getMessage()));
}
}
}
}
});
还有我的LocationRequest:
if (mLocationRequest == null) {
mLocationRequest = new LocationRequest();
if (Build.MANUFACTURER.toLowerCase().contains("samsung") &&
Build.MODEL.toLowerCase().contains("sm-g95")) {
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
} else {
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
mLocationRequest.setInterval(2000);
mLocationRequest.setFastestInterval(1000);
}
return mLocationRequest;
很高兴收到任何建议。
更新,我进行了一些测试,这是日志:
2018-11-20 09:56:11.055 29850-29850 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:56:29.554 30111-30111 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:56:48.847 30309-30309 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:57:30.645 30647-30647 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:57:58.354 30908-30908 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 09:58:16.632 31159-31159 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
2018-11-20 09:59:57.753 1665-1665 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:14.176 2200-2200 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:30.406 2963-2963 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: NETWORK_PROVIDER && GPS_PROVIDER both enabled
2018-11-20 10:00:45.215 3398-3398 D/TAG_MAP_PROVIDER_CHECK: onActivityResult: location providers not enabled
所有时候,当我遇到“未启用位置信息提供程序”时,都会用onActivityResult
进入(requestCode == REQUEST_CHECK_SETTINGS && resultCode == RESULT_CANCELED)
,并打开“仅设备”模式。
它似乎取决于我的手指在“是”按钮上的确切位置。 附加问题:是否可以为系统“打开位置”对话框创建自定义视图?