LocationRequest 的位置设置

Location settings for LocationRequest

在我的应用程序中,我想通过 GPS 获取设备的位置。好的,我声明 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 在清单中,当应用程序启动时,系统会要求用户允许 GPS。

当我阅读Android dok时,有两种选择:

  1. 所有位置设置都满足:

    task.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
      @Override
      public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
        // All location settings are satisfied. The client can initialize
        // location requests here.
        // ...
      }
    });
    
  2. 位置设置不满意:

    task.addOnFailureListener(this, new OnFailureListener() {
      @Override
      public void onFailure(@NonNull Exception e) {
         if (e instanceof ResolvableApiException) {
            // 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().
              ResolvableApiException resolvable = (ResolvableApiException) e;
              resolvable.startResolutionForResult(MainActivity.this,
                    REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException sendEx) {
              // Ignore the error.
            }
         }
      }
    });
    

看来,有两种资源,一种,我必须在清单中声明,另一种,我必须在运行时请求。

  1. 我做对了吗?
  2. 为什么要这样区分?

通过在 AndroidManifest.xml 中添加权限,应用会告诉 Android 系统我需要在应用中获得此权限才能按预期运行。

此后,如果您需要的权限列为dangerous,那么系统会向用户请求权限,否则系统会在运行时授予您该权限(这意味着您需要请求权限系统将根据需要采取行动)。

此权限规则适用于 API 级别 23+。

如果用户授予您权限,那么您将能够访问用户的该信息。

在位置的情况下,您需要进行额外的检查(问题的第二点),因为位置只能在启用位置设置时由系统检查。即,WiFi 符号、移动数据符号列表中的位置符号。

编辑: 如果省略检查位置设置的代码片段,那么如果用户的位置关闭,如this image,那么你将无法获取位置。

并且没有"android.permission.LOCATION_SETTINGS_ENABLED"这样的权限。