Android 使用优先级高精度定位时出现问题,settings.api对话框无法启用gps
我正在使用play services的位置设置,在pre-lollipop中效果很好,但在marshmallow中,gps没有启用,也没有在对话框中显示,即将使用仅限gps的wifi和手机网络,并且位置模式仅更改为节省电池 我为我的英语感到抱歉,我来自墨西哥。 这是我的代码: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
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中进行了测试,效果良好。。