Android 使用优先级高精度定位时出现问题,settings.api对话框无法启用gps

Android 使用优先级高精度定位时出现问题,settings.api对话框无法启用gps,android,gps,location,google-play-services,Android,Gps,Location,Google Play Services,我正在使用play services的位置设置,在pre-lollipop中效果很好,但在marshmallow中,gps没有启用,也没有在对话框中显示,即将使用仅限gps的wifi和手机网络,并且位置模式仅更改为节省电池 我为我的英语感到抱歉,我来自墨西哥。 这是我的代码: public void ActivarWifiGps(boolean gpsrequerido){ //Toast.makeText(getApplicationContext(), "se llamo a

我正在使用play services的位置设置,在pre-lollipop中效果很好,但在marshmallow中,gps没有启用,也没有在对话框中显示,即将使用仅限gps的wifi和手机网络,并且位置模式仅更改为节省电池

我为我的英语感到抱歉,我来自墨西哥。 这是我的代码:

public void ActivarWifiGps(boolean gpsrequerido){
        //Toast.makeText(getApplicationContext(), "se llamo al popup", Toast.LENGTH_SHORT).show();
        Log.i("sms", "se llamo al popup");
        mGoogleApiClient = new GoogleApiClient
                .Builder(this).
                addApi(LocationServices.API)
                .build();

     mGoogleApiClient.connect();

       mLocationRequest.setInterval(1000);
      mLocationRequest.setFastestInterval(FATEST_INTERVAL);
        if(gpsrequerido) {
            //EVEN ENTER HERE...
            Log.i("sms", "se usara gps");
            mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        }else{
            Log.i("sms", "se usara wifi");
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
        }
        mLocationRequest.setSmallestDisplacement(10);

        builder = new LocationSettingsRequest.Builder().addLocationRequest(mLocationRequest);
        builder.setAlwaysShow(true);


       // builder.setNeedBle(true);
        PendingResult<LocationSettingsResult> result =
                LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

        result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
            @Override
            public void onResult(LocationSettingsResult result) {


                final Status status = result.getStatus();
                final LocationSettingsStates state = result.getLocationSettingsStates();
                switch (status.getStatusCode()) {
                    case LocationSettingsStatusCodes.SUCCESS:
                        // All location settings are satisfied. The client can initialize location
                        // requests here.
                        //...}





                            Log.i("sms", "todo bien");
                            obj.comenzar();



                        Log.i("sms", "estan disponibles");
                       // Toast.makeText(MainActivity.this, "HOLA 1", Toast.LENGTH_SHORT).show();
                        break;
                    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                        // Location settings are not satisfied. But could be fixed by showing the user
                        // a dialog.

                        Log.i("sms", "Motrando popup");
                        //  if( !state.isNetworkLocationPresent()|| !state.isLocationUsable()){

                        //Toast.makeText(MainActivity.this, "HOLA 2", Toast.LENGTH_SHORT).show();
                        try {
                            // Show the dialog by calling startResolutionForResult(),
                            // and check the result in onActivityResult().
                            status.startResolutionForResult(
                                    MainActivity.this,
                                    REQUEST_CHECK_SETTINGS);
                        } catch (IntentSender.SendIntentException e) {
                            // Ignore the error.
                        }
                        // }
                        break;
                    case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                        //Toast.makeText(MainActivity.this, "HOLA 3", Toast.LENGTH_SHORT).show();
                        // Location settings are not satisfied. However, we have no way to fix the
                        // settings so we won't show the dialog.
                        //...
                        break;
                }
            }
        });
    }
public void ActivarWifiGps(布尔gpsrequerido){
//Toast.makeText(getApplicationContext(),“sellamo al popup”,Toast.LENGTH\u SHORT.show();
Log.i(“sms”、“se llamo al弹出窗口”);
mgoogleapclient=新的Googleapclient
.Builder(这个)。
addApi(LocationServices.API)
.build();
mGoogleApiClient.connect();
mlLocationRequest.setInterval(1000);
mLocationRequest.SetFastTestInterval(FATEST_INTERVAL);
if(gpsrequerido){
//即使进入这里。。。
Log.i(“sms”、“se usara gps”);
mLocationRequest.setPriority(位置请求.优先级高精度);
}否则{
Log.i(“sms”、“se usara wifi”);
mLocationRequest.setPriority(位置请求、优先级、平衡、功率、精度);
}
M定位请求。设置最小位移(10);
builder=新位置设置请求.builder().addLocationRequest(MLLocationRequest);
builder.setAlwaysShow(true);
//builder.setNeedBle(true);
Pendingreult结果=
LocationServices.SettingsApi.checkLocationSettings(mgoogleapClient,builder.build());
result.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(位置设置结果){
最终状态状态=result.getStatus();
最终位置SettingsStates状态=结果。getLocationSettingsStates();
开关(status.getStatusCode()){
案例位置设置StatusCodes.SUCCESS:
//满足所有位置设置。客户端可以初始化位置
//请求在这里。
//...}
Log.i(“sms”、“todo bien”);
obj.comenzar();
日志i(“sms”、“estan争议”);
//Toast.makeText(MainActivity.this,“HOLA 1”,Toast.LENGTH_SHORT.show();
打破
案例位置设置StatusCodes.RESOLUTION_要求:
//不满足位置设置。但可以通过显示用户来修复
//对话。
Log.i(“sms”、“Motrando弹出窗口”);
//如果(!state.isNetworkLocationPresent()| |!state.isLocationUsable()){
//Toast.makeText(MainActivity.this,“hola2”,Toast.LENGTH_SHORT.show();
试一试{
//通过调用startResolutionForResult()显示对话框,
//并在onActivityResult()中检查结果。
status.StartResult解决方案(
这个,,
请求检查设置);
}catch(IntentSender.sendtintentexe){
//忽略错误。
}
// }
打破
案例位置设置StatusCodes.SETTINGS\u CHANGE\u不可用:
//Toast.makeText(MainActivity.this,“HOLA 3”,Toast.LENGTH_SHORT.show();
//位置设置不满意。但是,我们无法修复此问题
//设置,这样我们就不会显示对话框。
//...
打破
}
}
});
}
这是一个对话框:

您在
AndroidManifest.xml
中使用了什么
权限
?感谢您的回答,但问题已经解决,我认为问题在于sdk的emutator,我在genymotion中进行了测试,效果良好。。