当Android设备处于飞行模式时,打开位置提示失败

时间:2017-03-22 07:02:43

标签: java android location

上下文 我有这个应用程序,要求用户在进行任何活动之前打开位置,因为我们在移动时记录位置,但是,我的一些用户选择在移动时保持飞行模式。我的所有用户都使用Android版本4.4三星Galaxy J1那根本没有根源。 我们的用户位于偏远地区,没有wifi信号和弱网络信号,所以我们只使用gps来获取位置。 下图显示了飞行模式关闭且应用程序中的位置关闭时的提示。

Expected prompt

问题:

不幸的是,在飞行模式下,系统不会提示用户打开他的位置。使用的代码如下所示google

public void getLocationSettings()
{
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
            .addLocationRequest(mLocationRequest);
    builder.setAlwaysShow(true);
    PendingResult<LocationSettingsResult> result =
            LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,
                    builder.build());
    result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
        @Override
        public void onResult(@NonNull LocationSettingsResult result) {
            final Status status = result.getStatus();
            //final LocationSettingsStates = result.getLocationSettingsStates();
            switch (status.getStatusCode()) {
                case LocationSettingsStatusCodes.SUCCESS:
                    // All location settings are satisfied. The client can
                    // initialize location requests here.

                    break;
                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                    // Location settings are not satisfied, but this can be fixed
                    // by showing the user a dialog.
                    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:
                    // Location settings are not satisfied. However, we have no way
                    // to fix the settings so we won't show the dialog.
                    break;
            }
        }
    });
}

在飞行模式和位置​​关闭时,此检查将始终显示为SETTINGS_CHANGE_UNAVAILABLE 因此,我们将无法进行任何活动。 但是,即使用户处于飞行模式,下面的其他代码检查也只能获取位置设置。

    public static Boolean gpsStatus(Context context)
{
    LocationManager locationManager = (LocationManager) context .getSystemService(context.LOCATION_SERVICE);
    return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
}

但是,通过上述方法,我无法执行下面的代码,通过在对话框中单击“ok”来提示用户打开位置:

    // Location settings are not satisfied, but this can be fixed
// by showing the user a dialog.
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.
}

上面的代码提示用户单击“确定”以打开位置,这样用户就不必离开应用程序并转到设置以打开位置。 在检查需要位置的其他应用程序时,我还注意到,由于它是谷歌地图使用的相同位置检查,当在飞行模式和位置​​关闭时。谷歌地图也将无法提醒用户转向位置并且只告诉他们检查他们的互联网连接。总是检查位置设置的最佳方式的任何想法将非常感谢,谢谢

1 个答案:

答案 0 :(得分:0)

截至目前,我正在使用这两种检查来处理两种情况,即提示用户在案例飞行模式关闭时打开位置,我们可以访问设置或只是要求用户转到设置并打开地点。 使用的代码如下所示。通过这种方法,我们可以始终成功检查位置设置并采取必要的措施。

        //go through here if gps is off and in flight mode
    if (!NativeLib.gpsStatus(MainActivity.this) && NativeLib.isAirplaneModeOn(MainActivity.this))
    {
        NativeLib.showSettingsAlert(MainActivity.this);
    }
    else
    {
      getLocationSettings();
    }