Android 11引入了对应用程序如何请求后台位置权限以及用户如何授予其权限的更改。具体更改取决于应用程序的目标SDK版本,但在Android 11上运行的所有应用程序均会受到影响

 

Background location access


为了给用户更好的控制,优良作法是让应用递增地请求他们所需的权限并优雅地处理权限拒绝。为了帮助实现最佳实践,Android 11删除了用户从应用程序内提示中授予后台位置访问权限的功能,如图1所示。
 

Android S 新特性 android r新特性_访问权限

                                                                  图1 位置权限的应用内对话框不再包含“始终允许”选项

 

如果您的应用程序需要背景位置,例如在实现地理围栏时,请确保它对应用程序功能至关重要,为用户提供明显的好处,并且以对他们来说显而易见的方式进行。请求后台位置的具体步骤取决于您应用的目标SDK版本:
1.    Android 11
2.    Android 10 (API level 29) or lower

 

Target Android 11


如果您的应用定位到Android 11,则无法直接请求对背景位置的全天候访问。相反,在需要后台位置的用例的情况下,请使用应用程序的UI来帮助用户了解您的应用程序为何需要此权限:

1.在应用的清单中包括ACCESS_BACKGROUND_LOCATION权限以及ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限。
2. 请求ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION运行时权限。
3. 等待用户授予您在上一步中请求的权限。
4. 在您的应用中显示包含以下内容的用户界面:

  1.  文字说明了您的应用功能需要后台位置权限的原因。
  2.   一个交互式元素,例如按钮或链接,它使用requestPermissions()方法请求后台权限。在Android 11中,此方法将用户定向到您应用的设置页面,而不是对话框
  3.  一种操作,允许用户无需授予后台位置权限即可继续使用您的应用。此操作可能会使用户离开需要后台位置访问权限的应用功能。

要引导用户在“设置”页面中授予后台权限,您可以在应用程序的说明中添加“设置”选项的用户可见标签。使用getBackgroundPermissionOptionLabel()检索已本地化为用户设备语言首选项的标签。

5. 当用户点击上一步中显示的交互式元素时,请执行以下操作之一:
如果您的应用尚未达到后台位置的权限对话框限制,请请求ACCESS_BACKGROUND_LOCATION运行时权限。
否则,您可以在系统设置中将用户定向到您的应用程序信息页面。图2提供了此系统设置页面的示例
 

Android S 新特性 android r新特性_Android_02

                                                     图2 设置界面包括一个选项,可授予全天候访问位置的权限

Limited requests for background location


在您的应用将用户导航到系统设置中的权限页面之后,用户可能会选择除实时访问之外的其他级别的位置访问权限,或者他们可能通常选择拒绝对位置的访问权限。如果用户两次拒绝您的应用的后台位置许可请求,则Android 11会忽略对该许可的进一步请求。因此,至关重要的是,您必须清楚地向用户解释为什么您的应用程序功能需要访问后台位置。

当您的应用遇到请求限制时,您仍然可以调用将用户定向到应用的信息页面,然后在系统设置内定向到应用的权限页面的意图。为此,请使用Settings.ACTION_APPLICATION_DETAILS_SETTINGS意向操作。但是,强烈建议不要使用此方法,因为它不会向用户说明您的应用为何请求权限

 

Target Android 10 or lower


如果您的应用定位到Android 10(API级别29)或更低版本,请完成以下步骤以请求ACCESS_BACKGROUND_LOCATION:
1.在应用的清单中包括ACCESS_BACKGROUND_LOCATION权限以及ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION权限。
2.请求ACCESS_BACKGROUND_LOCATION权限,以及其他位置权限之一:ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION。您可以在单个操作中请求这些权限

您的应用请求这些位置权限后,用户将看到系统对话框,如图3所示:
 

Android S 新特性 android r新特性_Android_03

图3. 位置许可提示,包括在授予任何位置许可之前,指向系统设置的链接(左)和在用户已经授予前台位置许可之后(右)

 

此对话框包括以下内容:

  1. 有关如何进入系统设置中的应用程序的位置权限页面以选择对设备位置的全天候访问权限的说明。
  2. 控制前台位置访问的按钮。

注意:如果用户在对话框中选择了两次前台按钮,则您的应用将不再显示位置权限对话框。对同一选项的多次选择意味着“不再询问”。 如果您尝试同时请求ACCESS_BACKGROUND_LOCATION和任何其他权限,则系统将引发异常。在Android 11 Developer Preview 1中,如果您尝试同时请求前台位置权限(ACCESS_COARSE_LOCATION或ACCESS_FINE_LOCATION)以及任何其他权限,则系统会错误地引发异常。

即使您的应用获得了对位置的全天候访问权限,也请记住,用户可以将应用的位置访问权限更改为仅在使用应用时允许或在系统设置中每次询问。他们还可以完全拒绝位置访问。