如何在Android中成功应用运行时权限?

问题描述 投票:1回答:2

我想在安装应用程序后向用户请求任何权限。

是否可以从当前API(7.0)到API级别19(4.4)请求运行时权限?

我已经阅读了文档,我尝试了很多例子。一切似乎太复杂,我甚至看到插件来请求权限。

该文档提供了一个使用几个NuGet包的示例:qazxsw poi

但它仅适用于Android M(6.0 API级别23)及以上......

本文讨论它:https://developer.xamarin.com/samples/monodroid/android-m/RuntimePermissions/

例如,在我的情况下,我想检查应用程序是否具有“权限CAMERA”,如果没有请求用户,如下所示:

https://blog.xamarin.com/requesting-runtime-permissions-in-android-marshmallow/

应用程序打开时不显示任何内容检查有效,但“RequestPermissions”不向用户询问任何内容。

  1. 为什么不显示什么?
  2. 为什么我需要使用“ActivityCompat”如果在M之前的版本中也不起作用?

任何人都可以给我一个例子来从一个简单的代码请求运行时权限(与M之前的版本兼容)吗?

android xamarin xamarin.android android-permissions
2个回答
0
投票

我得到了与你相同的结果,所以做了一点调查。诀窍是你必须在2个地方设置权限。 1.在清单2.运行时请求权限如此处所示if (Android.Support.V4.Content.ContextCompat.CheckSelfPermission(this, Manifest.Permission.Camera) != (int)Permission.Granted) { // Permission has never been accepted // So, I ask the user for permission ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Camera }, REQUEST_CAMERA); } else { // Permission has already been accepted previously } 结果不同。

在所有Android版本上,您的应用需要在其应用清单中声明其所需的正常和危险权限,如声明权限中所述。但是,根据系统版本和应用程序的目标SDK级别,该声明的效果会有所不同:

如果设备运行的是Android 5.1或更低版本,或者应用的目标SDK为22或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予权限;如果他们不授予权限,系统根本不会安装应用程序。如果设备运行的是Android 6.0或更高版本,并且您的应用的目标SDK为23或更高:应用必须列出清单中的权限,并且必须在应用运行时请求它所需的每个危险权限。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用程序也可以继续以有限的功能运行。


0
投票

运行时权限在Android 6.0(API 23 - Marshmallow)中引入。因此,您将无法以编程方式在任何低于23的Android API上设置运行时权限。您在问题中链接的https://developer.android.com/training/permissions/requesting.html指南可能是此处的最佳资源,而Requesting Runtime Permissions in Android Marshmallow部分显示了检查API级别和防止的逻辑运行时权限工作流在23之前的API级别上调用。

对于22及之前的先前API级别,您需要在Check the SDK Version中添加安装时权限,如AndroidManifest.xml指南中所述。

© www.soinside.com 2019 - 2024. All rights reserved.