【问题标题】:android - make content provider available to one package onlyandroid - 使内容提供者仅可用于一个包
【发布时间】:2015-09-07 20:02:25
【问题描述】:

有没有办法让外部内容提供者只对一个包可用? 例如仅适用于我的应用程序? 提前致谢。

【问题讨论】:

  • 你做到了吗?

标签: android package android-contentprovider


【解决方案1】:

虽然为时已晚,但我想分享我找到的答案, 您需要像这样在内容提供程序应用程序的清单文件中声明自己的自定义权限..

<permission android:name= "com.android.testpermission" android:protectionLevel="signature" >

在你的 Content Provider 标签内,你必须指定一个客户端需要这样的权限......

<provider android:name=".MyProvider" android:authorities="com.example.contentproviderexample.MyProvider" android:exported="true" android:permission="com.android.testpermission" android:multiprocess="true" ></provider>

在你的第二个应用程序中访问内容提供者数据,你需要在清单文件中指定使用权限,像这样..

&lt;uses-permission android:name="com.android.testpermission"/&gt; 现在使用相同的密钥库签名对两个应用程序进行签名,这样任何其他应用程序都无法访问您的内容提供者数据。只有拥有这些权限并使用相同密钥库签名签名的应用程序才能访问提供者数据。

【讨论】:

    【解决方案2】:

    您可以为内容提供者的清单声明添加权限。只有拥有这些权限的应用程序才能访问提供程序。

    【讨论】:

    • 是的,我知道,但是这样一来,谁知道权限字符串就可以访问提供者
    • 是的,唯一的另一种方法是将内容提供者限制为您的应用程序,将其设为私有(即:设置android:exported="false")。但是,这仅在内容提供者是您的应用程序的一部分时才有效。
    • 我的成就是允许用户在我的应用程序中下载和使用主题,但我想让用户或第三方创建自己的主题并在 google play 上发布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多