【问题标题】:Lint Warning ExportedContentProvider皮棉警告 ExportedContentProvider
【发布时间】:2012-07-27 13:15:42
【问题描述】:

我有一个导出的ContentProvider 用于访问用户想要通过其他应用共享的图像。简单地说,用户在我的应用程序中单击一个共享按钮,我向她显示可以共享图像的应用程序列表,然后她选择其中一个应用程序(调用我的ContentProvider 以获取基于 Uri 的图像)。

但是,有一个 lint 警告 ExportedContentProvider 说我应该使用权限。如果我确实设置了权限,其他应用如何知道访问图像的权限?

【问题讨论】:

    标签: android android-contentprovider android-lint


    【解决方案1】:

    Lint 所说的权限不是“访问图像”。它更多的是关于“使用你的 ContentProvider”。

    当用户选择一个应用来分享图片时,你会给这个应用一个 URI,而不是你的 ContentProvider。比如:

    intent.putExtra(Intent.EXTRA_STREAM, uri);
    

    使您提供给共享应用程序的 Uri 代表图像文件的路径。 不是您用来查询提供者的 Uri。

    要避免 Lint 警告,您可以添加

    android:exported="false"
    

    在清单的provider tag 中。

    您的提供者将只能在您的应用程序中使用。

    【讨论】:

    • 我知道 Lint 正在谈论使用我的 ContentProvider。如果我将导出设置为 false,那么即使其他应用程序具有 uri,也无法从 contentProvider 访问图像。
    • 那是因为您提供了 Uri 以通过提供程序访问图像。您应该改为提供图像文件的 Uri。您提供给共享应用程序的 Uri 必须代表 SDCard 上文件的路径或类似的东西。 Uri 不应代表与您的 ContentProvider 相关的内容。
    • 我不同意这种做法。共享图像的推荐方式是提供一个 URI,然后应用 ContentProvider 来实际提供数据。提供 SD 卡上文件的路径并不理想(文件的权限、位置可能会改变,也许您不希望直接通过应用程序访问文件等)流行的应用程序使用 Content Providers 来分享他们的数据。
    猜你喜欢
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2010-11-01
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多