Android-ContentProvider-自定义权限

Android-ContentProvider-自定义权限,android,permissions,Android,Permissions,我对内容提供商和自定义权限有问题 让我们假设应用程序A有一个包含精彩信息的内容提供商。这些信息有点侵入性,这就是为什么最好有阅读权限的原因 假设应用程序B是第三方应用程序,希望访问a的内容提供商 假设读取内容提供程序的权限为“com.custom.a.readpermission” 在舱单中,有: <permission android:name="com.custom.a.readpermission"/> <provider android:name="com.a.pro

我对内容提供商和自定义权限有问题

  • 让我们假设应用程序A有一个包含精彩信息的内容提供商。这些信息有点侵入性,这就是为什么最好有阅读权限的原因

  • 假设应用程序B是第三方应用程序,希望访问a的内容提供商

  • 假设读取内容提供程序的权限为“com.custom.a.readpermission”

  • 在舱单中,有:

    <permission android:name="com.custom.a.readpermission"/>
    
    <provider android:name="com.a.provider.MyProvider"
              android:exported="true"
              android:authorities="com.a.provider.MyProvider"
              android:readPermission="com.custom.a.readpermission"/>
    
    <uses-permission android:name="com.custom.a.readpermission"/>
    
    那么,在这种情况下,如何管理自定义权限

    那么,在这种情况下,如何管理自定义权限

    您的主要选择是:

  • 使用内置系统权限,而不是自定义权限。一般来说,如果敏感数据的性质与内置权限保护的其他数据相似,这是一个好主意

  • 捕获此异常并告诉用户需要卸载A和B,然后按正确的顺序安装

  • 如果A和B都是同一作者,请使用
    protectionLevel
    签名
    权限,并在A和B中使用相同的
    元素。这样安装顺序就无关紧要了,用户就不会被任何提示所困扰,从而同意此权限

  • 但是,请记住,在Android 5.0之前,选项3起作用的事实意味着,在A之前安装的任何应用程序都可以做与B相同的事情,除了将
    保护级别
    签名
    降级为
    正常
    。这是。Android 5.0要求自定义权限是在“wins中的第一个”的基础上定义的,而试图定义相同
    的第二个和后续应用必须使用与实际定义它的应用相同的签名密钥进行签名

    事实上,权限对于预安装的应用程序和操作系统本身来说都很好,但是在应用程序级别定义自定义权限是非常困难的。。。不太好

    那么,在这种情况下,如何管理自定义权限

    您的主要选择是:

  • 使用内置系统权限,而不是自定义权限。一般来说,如果敏感数据的性质与内置权限保护的其他数据相似,这是一个好主意

  • 捕获此异常并告诉用户需要卸载A和B,然后按正确的顺序安装

  • 如果A和B都是同一作者,请使用
    protectionLevel
    签名
    权限,并在A和B中使用相同的
    元素。这样安装顺序就无关紧要了,用户就不会被任何提示所困扰,从而同意此权限

  • 但是,请记住,在Android 5.0之前,选项3起作用的事实意味着,在A之前安装的任何应用程序都可以做与B相同的事情,除了将
    保护级别
    签名
    降级为
    正常
    。这是。Android 5.0要求自定义权限是在“wins中的第一个”的基础上定义的,而试图定义相同
    的第二个和后续应用必须使用与实际定义它的应用相同的签名密钥进行签名

    事实上,权限对于预安装的应用程序和操作系统本身来说都很好,但是在应用程序级别定义自定义权限是非常困难的。。。不太好

    java.lang.SecurityException: Permission Denial: opening provider com.a.provider.MyProvider requires com.custom.a.readpermission