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对话框时

  • 如果Gps处于关闭状态,则它将打开并设置为仅设备模式(仅Gps模式)
  • 如果Gps处于打开状态,则Gps处于关闭状态,并且在这两种情况下,我都会在ActivityResult上获得取消的结果
  • 这是我的密码

  • 位置助手
  • 公共类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);