令人惊讶的是,权限Allow only while using the app--实际上是整个主题--在开放源代码中并没有得到很好的阐述。让我们从应用此权限的两种情况开始。Techwise指南“如何允许Chrome访问Android上的相机和麦克风”提到了这一步骤 1.点击相机选项并选择Allow only while using the app。 此外,我们还将在Android开发者文档中的“在运行时请求位置访问”中找到类似的情况。 图1.需要前台位置访问的位置共享功能。如果用户选择Allow only while using the app,则启用该功能。 这不是巧合,我们将在相机/麦克风或位置的上下文中找到Allow only while using the app(从现在开始,让我们将它们缩写为CML)。Google支持页面“更改Android手机上的应用权限”列出 要更改权限设置,请点击权限设置,然后选择Allow或Don't allow。 对于位置、摄像头和麦克风权限,您可以选择:
All the time:仅用于位置。该应用可以随时使用该权限,即使您不使用该应用时也是如此。
Allow only while using the app:应用程序只能在您使用该应用程序时使用该权限。
Ask every time:每次打开应用程序时,它都会询问使用权限。它可以使用该权限,直到你完成应用程序。
Don't allow:应用无法使用该权限,即使您正在使用该应用也是如此。
感性要求严谨
在此之前,您也会发现CML只有Allow,Don't Allow,以及Ask every time,Ask first,Ask to allow或类似的东西。要么是事先决定是否允许,要么是每次启动应用程序时决定是否允许。到目前为止很容易。 然而,很明显CML是明智的,并且在Android 10(API级别29)中,CML的使用变得更加严格,特别是在一点上--前台和后台服务也有所不同。正如我们在文档中看到的那样,“请求位置权限:背景位置” 在Android 10(API级别29)及更高版本上,您必须在应用清单中声明ACCESS_BACKGROUND_LOCATION权限,才能在运行时请求后台位置访问。在早期版本的Android上,当您的应用接收前台位置访问时,它也会自动接收后台位置访问。 可以在这里标记“更早”,并记住上面提到的“更早”。这是有联系的还要注意关键字“runtime”。正如文档中所说的“运行时权限”: 运行时权限(也称为危险权限)给予您的应用访问受限数据的额外权限,或允许您的应用执行受限操作,这些操作会对系统和其他应用产生更大影响。 因此,用户必须显式地授予此类权限。开发商应 不要假设这些权限以前已经被授予--检查它们,如果需要,在每次访问之前请求它们。 这导致了众所周知的访问存储、联系人、CML或其他任何合理的权限提示--尽管CML被认为是特别合理的。因此,CML的权限列表包含如下层次结构:
Don't allow:名词就是预兆。
Ask every time:仅反映用户使用服务的 * 基本 * 权限,在安装时预先提供。当需要更严格的权限时,比如CML,这是不够的,因为这个选项在前台和后台访问之间没有区别。
Allow only while using the app:* 显式 * 仅在使用应用程序时在 * 前台 * 赠款对相关服务的访问权限。
All the time:仅用于位置。明确地允许位置服务不仅在前台运行,而且在后台运行。
因此,尽管Ask every time可以用于授权访问,例如:对于存储器或联系人,在应用范例的情况下,必须在许可方面分开考虑前台或后台中的服务的使用是不够的。也许在未来,这种范式将不仅仅适用于CML。
**注:“单独”一词可能会产生误导。最后你有三个选择
不许
允许前台
允许前景 * 和背景 *
如果没有前台的权限,就没有选项来获取后台的权限。
总结
Ask every time在你的情况下还不够,因为它对于Android 10以来的相机服务来说不够严格。因此,您必须授予更严格的权限Allow only while using the app。
2条答案
按热度按时间zxlwwiss1#
打开一个赏金后找到了答案
在Android麦克风权限中,“每次问”是不够的;你必须有它在“允许仅在使用应用程序”
yzuktlbb2#
虽然你自己找到了答案,但你要求一个规范的答案。所以我允许自己详细阐述一下你的问题和解决方案的背景,正如你想知道的那样,发生了什么。;-)
人们可以使用这些链接作为进一步详细研究的起点。
用例-摄像头、麦克风和位置
令人惊讶的是,权限
Allow only while using the app
--实际上是整个主题--在开放源代码中并没有得到很好的阐述。让我们从应用此权限的两种情况开始。Techwise指南“如何允许Chrome访问Android上的相机和麦克风”提到了这一步骤1.点击相机选项并选择
Allow only while using the app
。此外,我们还将在Android开发者文档中的“在运行时请求位置访问”中找到类似的情况。
图1.需要前台位置访问的位置共享功能。如果用户选择
Allow only while using the app
,则启用该功能。这不是巧合,我们将在相机/麦克风或位置的上下文中找到
Allow only while using the app
(从现在开始,让我们将它们缩写为CML)。Google支持页面“更改Android手机上的应用权限”列出要更改权限设置,请点击权限设置,然后选择
Allow
或Don't allow
。对于位置、摄像头和麦克风权限,您可以选择:
All the time
:仅用于位置。该应用可以随时使用该权限,即使您不使用该应用时也是如此。Allow only while using the app
:应用程序只能在您使用该应用程序时使用该权限。Ask every time
:每次打开应用程序时,它都会询问使用权限。它可以使用该权限,直到你完成应用程序。Don't allow
:应用无法使用该权限,即使您正在使用该应用也是如此。感性要求严谨
在此之前,您也会发现CML只有
Allow
,Don't Allow
,以及Ask every time
,Ask first
,Ask to allow
或类似的东西。要么是事先决定是否允许,要么是每次启动应用程序时决定是否允许。到目前为止很容易。然而,很明显CML是明智的,并且在Android 10(API级别29)中,CML的使用变得更加严格,特别是在一点上--前台和后台服务也有所不同。正如我们在文档中看到的那样,“请求位置权限:背景位置”
在Android 10(API级别29)及更高版本上,您必须在应用清单中声明ACCESS_BACKGROUND_LOCATION权限,才能在运行时请求后台位置访问。在早期版本的Android上,当您的应用接收前台位置访问时,它也会自动接收后台位置访问。
可以在这里标记“更早”,并记住上面提到的“更早”。这是有联系的还要注意关键字“runtime”。正如文档中所说的“运行时权限”:
运行时权限(也称为危险权限)给予您的应用访问受限数据的额外权限,或允许您的应用执行受限操作,这些操作会对系统和其他应用产生更大影响。
因此,用户必须显式地授予此类权限。开发商应
不要假设这些权限以前已经被授予--检查它们,如果需要,在每次访问之前请求它们。
这导致了众所周知的访问存储、联系人、CML或其他任何合理的权限提示--尽管CML被认为是特别合理的。因此,CML的权限列表包含如下层次结构:
Don't allow
:名词就是预兆。Ask every time
:仅反映用户使用服务的 * 基本 * 权限,在安装时预先提供。当需要更严格的权限时,比如CML,这是不够的,因为这个选项在前台和后台访问之间没有区别。Allow only while using the app
:* 显式 * 仅在使用应用程序时在 * 前台 * 赠款对相关服务的访问权限。All the time
:仅用于位置。明确地允许位置服务不仅在前台运行,而且在后台运行。因此,尽管
Ask every time
可以用于授权访问,例如:对于存储器或联系人,在应用范例的情况下,必须在许可方面分开考虑前台或后台中的服务的使用是不够的。也许在未来,这种范式将不仅仅适用于CML。**注:“单独”一词可能会产生误导。最后你有三个选择
如果没有前台的权限,就没有选项来获取后台的权限。
总结
Ask every time
在你的情况下还不够,因为它对于Android 10以来的相机服务来说不够严格。因此,您必须授予更严格的权限Allow only while using the app
。