Android 无法在某些设备中使用FusedLocationProvider将Gps设置升级到高精度
我正在使用Android 无法在某些设备中使用FusedLocationProvider将Gps设置升级到高精度,android,fusedlocationproviderapi,android-fusedlocation,fusedlocationproviderclient,Android,Fusedlocationproviderapi,Android Fusedlocation,Fusedlocationproviderclient,我正在使用SettingsApi和FusedLocationProvider升级Gps设置并获取位置更新,我需要高精度的位置更新,我正在显示使用SettingsApi打开Gps对话框以将Gps设置升级到高精度,但在某些设备中(如Mi和Gionee)即使用户在Gps对话框上依次单击OK按钮,我也会在ActivityResult上得到取消的结果,而在摩托罗拉、联想等其他设备上,一切都正常工作 当用户依次单击Gps对话框时 如果Gps处于关闭状态,则它将打开并设置为仅设备模式(仅Gps模式) 如果Gp
SettingsApi
和FusedLocationProvider
升级Gps设置并获取位置更新,我需要高精度的位置更新,我正在显示使用SettingsApi
打开Gps对话框以将Gps设置升级到高精度,但在某些设备中(如Mi和Gionee)即使用户在Gps对话框上依次单击OK按钮,我也会在ActivityResult上得到取消的结果,而在摩托罗拉、联想等其他设备上,一切都正常工作
当用户依次单击Gps对话框时
公共类LocationHelper{
私有静态最终字符串标记=LocationHelper.class.getSimpleName();
私有长更新IntervalinMilliSeconds=10000;
私有long FastTestUpdateIntervalinMilliSeconds=updateIntervalInMilliseconds/2;
私有FusedLocationProviderClient mFusedLocationClient;
私人设置客户端mSettingsClient;
私人位置请求mLocationRequest;
私人位置设置请求MLLocationSettingsRequest;
私有位置回调mLocationCallback;
私有布尔值mRequestingLocationUpdates=false;
private int required gpspriority=位置请求。优先级\平衡\功率\精度;
public LocationHelper(上下文mContext){
mFusedLocationClient=LocationServices.getFusedLocationProviderClient(mContext);
mSettingsClient=LocationServices.getSettingsClient(mContext);
}
/**
*设置所需的gps优先级
*
*Gps优先级可以是
*
*- 定位请求。优先级\u高\u精度
*- 位置请求。优先级\u平衡\u功率\u精度
*- 位置请求。优先级\u无电源
*- 位置请求。优先级\u低\u功率
*
*
*默认为LocationRequest.PRIORITY\u BALANCED\u POWER\u准确性
*
*@param requiredGpsPriority gps优先级
*/
public void setRequiredGpsPriority(int requiredGpsPriority){
this.requiredGpsPriority=requiredGpsPriority;
}
/**
*设置更新间隔还将FastTestUpdateIntervalinMillSeconds设置为UpdateIntervalinMillSeconds的一半
*默认值为10秒
*
*@param updateIntervalInMilliseconds更新间隔
*/
公共无效设置日期间隔(长更新间隔毫秒){
this.updateIntervalInMilliseconds=updateIntervalInMilliseconds;
this.fastestUpdateIntervalInMilliseconds=updateIntervalInMilliseconds/2;
}
/**
*设置最快的更新间隔
*默认值为5秒
*
*@param fastestupdateintervalinMills最快更新间隔
*/
public void setFastTestUpdateIntervalinMilliSeconds(长FastTestUpdateIntervalinMilliSeconds){
this.fastestUpdateIntervalInMilliseconds=fastestUpdateIntervalInMilliseconds;
}
公共void init(){
createLocationRequest();
buildLocationSettingsRequest();
}
公共无效setLocationCallback(LocationCallback LocationCallback){
this.mLocationCallback=locationCallback;
}
私有void createLocationRequest(){
mlLocationRequest=新位置请求();
mLocationRequest.setInterval(updateIntervalinMills);
mLocationRequest.SetFastTestInterval(FastTestUpdateIntervalinMilliSeconds);
mLocationRequest.setPriority(requiredGpsPriority);
}
私有void buildLocationSettingsRequest(){
LocationSettingsRequest.Builder=新建LocationSettingsRequest.Builder();
builder.addLocationRequest(mlLocationRequest);
builder.setAlwaysShow(true);
mLocationSettingsRequest=builder.build();
}
公共布尔值isRequestingForLocation(){
返回mRequestingLocationUpdates;
}
设置的公共无效检查(GpsSettingsCheckCallback){
if(mLocationSettingsRequest==null){
抛出新的IllegalStateException(“在检查gps设置之前必须调用init());
}
//首先检查设备是否具有必要的jobLocation设置。
mSettingsClient.checkLocationSettings(MLLocationSettingsRequest)
.addOnSuccessListener(位置设置响应->回调.RequiredGPSSettingAravailable())
.addOnFailureListener(e->{
int statusCode=((ApiException)e).getStatusCode();
开关(状态代码){
案例位置设置StatusCodes.RESOLUTION_要求:
Log.i(标记“SuggestedLocation设置未满足。通知回请求对象”);
ResolvableApiException rae=(ResolvableApiException)e;
回调。所需的gpssettingarunavailable(rae);
打破
案例位置设置StatusCodes.SETTINGS\u CHANGE\u不可用:
i(标记“从设置中打开建议的位置”);
callback.gpsSettingsNotAvailable();
打破
}
});
}
/**
*从FusedLocatio启动位置更新
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivityForResult(intent, REQUEST_UPDATE_GPS_SETTINGS_MANUALLY);