gpt4 book ai didi

Android:Google Fused Location 在位置关闭时不起作用

转载 作者:行者123 更新时间:2023-11-29 19:35:41 27 4
gpt4 key购买 nike

getLastLocation() 在我的 6.0 Nexus 7 平板电脑上关闭手机位置时返回 NULL,但在另一台设备上它可以在没有 GPS 的情况下工作。为什么会这样,有什么办法可以解决吗?我想关闭 GPS,只使用网络获取位置。

下面是我用来获取位置的类:

public class GPSCenter {
public static GoogleApiClient mGoogleApiClient;
public static Location mLastLocation;
private static Context mContext;

static GoogleApiClient.ConnectionCallbacks ccb = new GoogleApiClient.ConnectionCallbacks() {

@Override
public void onConnectionSuspended(int arg0) {
}

@Override
public void onConnected(Bundle arg0) {

if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}

LocationRequest mLocationRequest = LocationRequest.create();
mLocationRequest.setPriority(LocationRequest.PRIORITY_NO_POWER);

mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
}
};
static GoogleApiClient.OnConnectionFailedListener odfl = new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult arg0) {
}
};

public static synchronized void buildGoogleApiClient(Context c) {
try {

mContext = c;
mGoogleApiClient = new GoogleApiClient.Builder(c)
.addConnectionCallbacks(ccb)
.addOnConnectionFailedListener(odfl)
.addApi(LocationServices.API)
.build();

mGoogleApiClient.connect();
} catch (Exception ex) {
Log.i("location", "error " + ex.toString());
ex.printStackTrace();
}
}

public static double getLatitude(Context c) {
try {
return mLastLocation.getLatitude();
} catch (Exception ex) {
return 0.0;
}
}

public static double getLongitude(Context c) {
try {
return mLastLocation.getLongitude();
} catch (Exception ex) {
return 0.0;
}
}
}

最佳答案

这不是因为 GPS 问题,而是设备中尚未启用位置设置,它在您的设备设置>Google>服务>位置或设置>隐私和安全>下位置,或只是设置 > 位置。我很困惑,因为在某些设备中,下拉状态栏显示 GPS 启用按钮,有些显示位置启用按钮。有一种方法可以自动启用位置设置(无需将用户导航至设备设置),它解决了我的问题,希望对您有所帮助:

连接 GoogleApiClient 后,执行位置设置检查,如下所示:

public static GoogleApiClient mGoogleApiClient;
private static PendingResult<LocationSettingsResult> result;
private static LocationSettingsRequest.Builder builder;
public static Location mLastLocation;
public static boolean isLocationON = false;

public static synchronized void buildGoogleApiClient(Activity a, Context c) {

try {

mActivity = a;
mContext = c;
mGoogleApiClient = new GoogleApiClient.Builder(c)
.addConnectionCallbacks(ccb)
.addOnConnectionFailedListener(odfl)
.addApi(LocationServices.API)
.build();

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

mGoogleApiClient.connect();

} catch (Exception ex) {
ex.printStackTrace();
}
}

private static GoogleApiClient.ConnectionCallbacks ccb = new GoogleApiClient.ConnectionCallbacks() {

@Override
public void onConnected(Bundle arg0) {
checkLocationSettings();
}

@Override
public void onConnectionSuspended(int arg0) {
}
};

private static void checkLocationSettings() {

result = LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());

result.setResultCallback(new ResultCallback<LocationSettingsResult>() {

@Override
public void onResult(@NonNull LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:

isLocationON = true;

if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

if (mLocationSettingsListener != null) {
mLocationSettingsListener.onLocationON();
}

break;

case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:

isLocationON = false;

try {
// This line will check the result and prompt a dialog if the device location settings is not enabled
status.startResolutionForResult(mActivity, REQUEST_CHECK_SETTINGS);

} catch (IntentSender.SendIntentException e) {
}
break;

case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
isLocationON = false;
// Location settings are unavailable so not possible to show any dialog now
if (mLocationSettingsListener != null) {
mLocationSettingsListener.onLocationError();
}
break;
}
}
});
}

关于Android:Google Fused Location 在位置关闭时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39226392/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com