【问题标题】:Grant READ_EXTERNAL_STORAGE permission for android private app without dialog at runtime在运行时为没有对话框的android私有应用授予READ_EXTERNAL_STORAGE权限
【发布时间】:2019-11-30 03:25:34
【问题描述】:

我是 OEM 的 Android 应用程序开发人员,我正在构建一个 MediaPlayer 应用程序,该应用程序需要访问外部存储以播放位于其中的音频。 (我将我的应用程序添加到 AOSP 构建系统,然后构建整个 Android 映像,包括我的 MediaPlayer 应用程序)。请注意,我使用的是 AOSP 版本 9 (Android Pie)

我的实现步骤如下

  1. 在 AndroidManifest.xml 中声明所需的权限

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

  2. 创建特权权限白名单:privapp-permissions-test.xml

    <?xml version="1.0" encoding="utf-8"?>
    <permissions>
        <privapp-permissions package="com.example.mediaplayer">
            <permission name="android.permission.READ_EXTERNAL_STORAGE" />
            <permission name="android.permission.WRITE_EXTERNAL_STORAGE" />
        </privapp-permissions>
    </permissions>
    
  3. 建成后
    • 我的应用程序位于 /system/priv-app/
    • privapp-permissions-test.xml 复制到 /system/etc/permissions/

但是当启动设备并启动我的应用程序时,它崩溃了,logcat 显示如下

com.example.mediaplayer.service.MusicService: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/audio/media from pid=3452, uid=10021 requires android.permission.READ_EXTERNAL_STORAGE

有没有人可以帮帮我??非常感谢任何帮助。

【问题讨论】:

    标签: android permissions


    【解决方案1】:

    最后,我解决了我的问题。下面是解决办法

    1. 创建默认权限文件default-permission-sample.xml
      <?xml version="1.0" encoding="utf-8"?>
      <exceptions>
          <exception package="com.example.mediaplayer">
              <permission name="android.permission.READ_EXTERNAL_STORAGE"/>
              <permission name="android.permission.WRITE_EXTERNAL_STORAGE"/>
          </exception>
      </exceptions>
      
    2. 配置 makefile 以将 default-permission-sample.xml 复制到 /system/etc/default-permissions/ 文件夹

    完成。当我第一次启动我的应用程序时,它不再请求许可。

    【讨论】:

    • 嗨!我有同样的问题,你确定'例外'标签吗?您指的是“权限”吗?
    • @Giuseppe:正是“例外”
    • @TuanPM 如何从应用程序本身复制到“/system/etc/default-permissions/”文件夹(如果没有root)
    • @felixAntony 不幸的是,没办法。我的指南是从 AOSP 源代码构建 Android。
    【解决方案2】:

    根据relative doc,要自动授予运行时权限,您需要在方法grantDefaultSystemHandlerPermissions(int userId)中添加/编辑项目 /frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java

    您可以按照源代码的模式根据需要添加其他权限授予逻辑。

    【讨论】:

      猜你喜欢
      • 2020-06-17
      • 2015-11-19
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-22
      • 2015-12-02
      • 1970-01-01
      相关资源
      最近更新 更多