Android 棉花糖权限不适用于低于23的TargetVersion

Android 棉花糖权限不适用于低于23的TargetVersion,android,Android,我的项目是一个长期运行的项目。我把目标版本设定为10,4年前。我无法将目标版本更改为23,因为我使用的是httpImageCache,而且UI也有问题。我的问题是,当Marshmallow发布时,我试图将Marshmallow与targetVersion 10集成 int returnedPermission = ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.WRITE_EXTERNAL_STORA

我的项目是一个长期运行的项目。我把目标版本设定为10,4年前。我无法将目标版本更改为23,因为我使用的是httpImageCache,而且UI也有问题。我的问题是,当Marshmallow发布时,我试图将Marshmallow与targetVersion 10集成

 int returnedPermission = ContextCompat.checkSelfPermission(MyActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
如果我从“应用程序设置”页手动打开或关闭存储权限,则此函数始终会重试“0”。谁能帮帮我吗

谁能帮帮我吗


删除那个代码,因为它对你没用。如果您的
targetSdkVersion
低于23,则无法确定用户是否已撤销权限。

As@Commonware已经给出了答案,但我在这里为问题添加了更多细节,这可能会对您有所帮助。 根据android开发者官方网站:

  • 如果设备运行的是Android 5.1或更低版本,或者您的应用程序的目标 SDK为22或更低版本:如果您在 清单,用户在安装应用程序时必须授予权限;如果他们不授予权限,则系统根本不会安装该应用。

  • 如果设备运行的是Android 6.0或更高版本,并且您的应用程序的目标 SDK为23或更高版本:应用程序必须在 清单,并且它必须请求它需要的每个危险权限 当应用程序运行时。用户可以授予或拒绝每个权限, 而且,即使 用户拒绝权限请求

由于您的目标SDK是10,所以应用程序将像以前的应用程序一样完美地运行。无论如何,请注意,用户仍然可以在之后撤销权限。。!!!尽管安卓6.0在用户尝试这样做时会发出警告,但他们仍然可以撤销

上述声明摘自。

使用


当targetSdkVersion时,您可以尝试该方法的非兼容版本“Context.checkSelfPermission”吗?0是常量“PackageManager.PERMISSION_grated”。如果未授予,则应返回“PackageManager.PERMISSION_DENIED”(-1)。是的,这是我想要的,当我从应用程序设置中关闭时,它应返回-1,但此函数始终返回0。这可能是兼容性库中的错误。请尝试标准版本,并检查结果是否相同。没有“Context.checkSelfPermission”这样的方法。@史密斯先生,请您进一步解释一下,好吗?因此,当用户关闭权限时,我无能为力。@neena:正确。如果用户撤销权限,您不应该得到任何
SecurityExceptions
,但是受这些权限保护的API应该返回空结果(例如,没有GPS补丁,没有联系人)。因此,如果targetVersion低于23,并且用户撤销权限,我什么也做不了,是这样吗?当我们调用一个函数,该函数要求在targetSdkVersion小于23的应用程序上吊销用户权限时,不会引发任何异常。相反,它将什么也不做。对于返回值的函数,它将根据具体情况返回null或0。虽然应用程序不会因为调用函数而崩溃。它可能仍然会因为应用程序接下来使用这些返回值执行的操作而崩溃。这是正确的答案。我猜在@commonware发布了他的答案后,PermissionChecker就可以使用了