Android Lint警告ExportedContentProvider

Android Lint警告ExportedContentProvider,android,android-contentprovider,android-lint,Android,Android Contentprovider,Android Lint,我有一个导出的ContentProvider,用于访问用户希望通过其他应用程序共享的图像。简单地说,用户单击我的应用程序中的共享按钮,我向她显示可以共享图像的应用程序列表,她选择其中一个应用程序(调用myContentProvider根据Uri获取图像) 但是,有一个lint警告ExportedContentProvider说我应该使用权限。如果我设置了权限,其他应用程序如何知道访问图像的权限?Lint所说的权限不是“访问图像”。它更多的是关于“使用你的内容提供者” 当用户选择应用程序共享图像时

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


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

Lint所说的权限不是“访问图像”。它更多的是关于“使用你的内容提供者”

当用户选择应用程序共享图像时,您将为此应用程序提供URI,而不是您的ContentProvider。比如:

intent.putExtra(Intent.EXTRA_STREAM, uri);
Make sur您为共享应用程序提供的Uri表示图像文件的路径。 而不是用于查询提供者的Uri

若要避免出现绒线警告,只需添加

android:exported="false"
在你的舱单上


您的提供商将只能从您的应用程序中使用。

Lint所说的权限不是“访问图像”。它更多的是关于“使用你的内容提供者”

当用户选择应用程序共享图像时,您将为此应用程序提供URI,而不是您的ContentProvider。比如:

intent.putExtra(Intent.EXTRA_STREAM, uri);
Make sur您为共享应用程序提供的Uri表示图像文件的路径。 而不是用于查询提供者的Uri

若要避免出现绒线警告,只需添加

android:exported="false"
在你的舱单上


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

我知道Lint正在谈论使用我的ContentProvider。如果我将exported设置为false,则其他应用程序无法从contentProvider访问图像,即使它们具有uri。这是因为您提供了uri,以便通过提供者访问图像。您应该给出图像文件的Uri。您为共享应用程序提供的Uri必须表示SD卡上文件的路径或类似内容。Uri不应该表示与ContentProvider相关的内容。我不同意这种方法。共享图像的推荐方法是提供一个URI,然后由app ContentProvider实际提供数据。提供SD卡上文件的路径并不理想(文件的权限、位置可能会更改,可能您不希望直接访问文件,而只希望通过应用程序等)流行应用程序使用内容提供商共享其数据。我知道Lint正在谈论使用我的内容提供商。如果我将exported设置为false,则其他应用程序无法从contentProvider访问图像,即使它们具有uri。这是因为您提供了uri,以便通过提供者访问图像。您应该给出图像文件的Uri。您为共享应用程序提供的Uri必须表示SD卡上文件的路径或类似内容。Uri不应该表示与ContentProvider相关的内容。我不同意这种方法。共享图像的推荐方法是提供一个URI,然后由app ContentProvider实际提供数据。提供SD卡上文件的路径并不理想(文件的权限、位置可能会更改,可能您不希望直接访问文件,而只希望通过应用程序等)流行应用程序使用内容提供商共享其数据。