当前位置: 首页 > 知识库问答 >
问题:

如何声明不同api级别的权限?

简学文
2023-03-14

我目前正在开发一个api级别在21-29之间的android应用程序。我的问题是api级别29以下不支持某些权限。例如 权限不需要声明api级别29以下。当我定义这个权限并获取所有权限,然后要求用户授予权限时,低于api级别29的应用程序正在崩溃。我需要为不同的api级别定义不同的权限或者如何处理这个问题?

下面是我的manifest.xml

  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.RECORD_AUDIO" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

这是我获得所有权限的代码

PackageInfo info =
       getPackageManager()
           .getPackageInfo(
               getApplicationContext().getPackageName(), PackageManager.GET_PERMISSIONS);

   ActivityCompat.requestPermissions(this, info.requestedPermissions, PERMISSION_CODE); 



@Override
   public void onRequestPermissionsResult(
       int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
     if (requestCode == PERMISSION_CODE) {

       OptionalInt minValuePermission = Arrays.stream(grantResults).min();

       if (minValuePermission.isPresent()
           && minValuePermission.getAsInt() == PackageManager.PERMISSION_GRANTED) {/**/}

共有1个答案

郎言
2023-03-14

您不需要为不同的OS版本声明不同的列表--稍后引入的权限将在较低的平台上被忽略/忽略

此外:并非所有权限都可以通过activitycompat.requestPermissions获得,forreground_service不适合shure(应该自动授予),您不应该要求它。因此,您不应该通过PackageManager获得所有声明权限的完整列表,而是使用运行时perms创建自己的Java/Kotlin数组

ActivityCompat.requestPermissions(this,
                // below your array with runtime permissions
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                PERMISSION_CODE);
 类似资料:
  • SOFADashboard 使用了一些三方开源组件,他们分别是: Spring under Apache 2.0 license Spring Boot under Apache 2.0 license SLF4j under the MIT License SOFA Bolt under Apache License 2.0 SOFA Bolt under Apache License 2.0

  • 《THE NVL Maker》(以下简称本工具)为非商业软件。与任何商业组织无关。工具开发团队(即官网页面中写明的工具、插件、素材作者)拥有各自所制作部分的著作权。使用本工具制作的游戏工程或其他作品,著作权归属游戏作者。工具本体部分和游戏工程部分,适用的协议不同,具体请见下方。 工具本体的使用、修改权(GPL) 工具本体指《THE NVL Maker》的编辑器(Editor.exe)本体。无论是否

  • SOFABoot 使用了一些三方开源组件,他们分别是: 一些主要依赖: Spring under Apache 2.0 license Spring Boot under Apache 2.0 license SLF4j under the MIT License sofa-common-tools under Apache 2.0 license 一些扩展依赖: nuxeo under Apac

  • 版权所有 (c)2016,Niushop开源商城团队保留所有权利。 感谢您选择Niushop开源商城(以下简称NiuShop)NiuShop基于 PHP + MySQL的技术开发。 为了使你正确并合法的使用本软件,请你在使用前务必阅读清楚下面的协议条款: 一、本授权协议适用且仅适用于Niushop开源商城系统(以下简称Niushop)任何版本,Niushop开源商城官方拥有最终解释权。 二、著作权

  • 问题内容: 我正在用Java处理数组,但有一个问题。我知道Java中的数组是类似数据类型的集合,如下所示: 上面的声明可以作为一个数组读取,该数组是整数类型的集合。 考虑一下: 在这里,我可以说上面的是一个数组,它是不同数据类型的集合,还是它是相似数据类型(即对象)的数组? 我对此感到困惑和怀疑。在Java中,是否可以创建可以容纳不同数据类型的数组或任何种类的集合? 问题答案: Java中的所有对

  • API引用 在 1.4 版更改: 声明系统的基本结构现在直接成为SQLAlchemy ORM的一部分。有关这些组件,请参见: declarative_base() declared_attr has_inherited_table() synonym_for() sqlalchemy.orm.as_declarative() 见 声明性扩展 对于其余的声明性扩展类。