自动授予Uri权限

问题描述 投票:0回答:1

我有一个简单的内容提供程序,可以将文件提供给其他应用程序。它扩展了ContentProvider(不是FileProvider),并在清单中这样声明:

<provider
    android:name="com.FileProvider"
    android:authorities="com.FileProvider"
    android:exported="false"
    android:grantUriPermissions="true" />

query方法返回一个简单的游标,其中包含以下列(_display_name_datasize)。

我还实现了openAssetFile,它返回相同的文件。

我正在使用以下代码与其他应用共享我的URI:

val intent = Intent(Intent.ACTION_SEND)
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://com.FileProvider/teste"))
intent.type = "image/*"

startActivity(intent)

URI中的最终路径段无关紧要,因为query方法始终返回相同的游标。

我可以与其他应用成功共享文件,但是,我绝对不会通过调用Context.grantUriPermission或通过意图标志来授予对该URI的读写权限。提供程序未导出。

我已经通过FileProvider实现在其他应用中检查了此行为。即使URI指向内部文件,也可以共享。

删除android:grantUriPermissions="true"会导致预期的行为,因此似乎该行会自动授予权限。但这不是文档所说的。

我的问题是,如果我未授予其他应用程序的共享权限,为什么我可以共享此URI?

android android-contentprovider
1个回答
0
投票
我可以与其他应用成功共享文件,但是,在任何地方,我都不可以通过调用Context.grantUriPermission或通过意图标志来授予对该URI的读写权限。

Google添加了在某些情况下自动授予FLAG_GRANT_READ_URI_PERMISSION的逻辑,我认为这是向后兼容的举动。 ACTION_SEND was one of them。我仍然引导开发人员手动添加标志,以防将来某些Android版本恢复此更改(或设备制造商这样做),但是从技术上讲,这不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.