Android 自动授予的Uri权限
我有一个简单的内容提供商,可以向其他应用程序提供文件。它扩展了Android 自动授予的Uri权限,android,android-contentprovider,Android,Android Contentprovider,我有一个简单的内容提供商,可以向其他应用程序提供文件。它扩展了ContentProvider(不是FileProvider),并在清单中声明如下: query方法返回一个简单的光标,其中包含以下列(\u display\u name、\u data和size) 我还实现了返回相同文件的openAssetFile 我正在使用以下代码与其他应用程序共享我的URI: val intent = Intent(Intent.ACTION_SEND) intent.putExtra(Intent.EXT
ContentProvider
(不是FileProvider
),并在清单中声明如下:
query
方法返回一个简单的光标,其中包含以下列(\u display\u name
、\u data
和size
)
我还实现了返回相同文件的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的读写权限。未导出提供程序
我已经在另一个应用程序中使用文件提供程序
实现检查了这种行为。URI即使指向内部文件,也可以共享
删除android:grantUriPermissions=“true”会导致预期的行为,因此这行代码似乎会自动授予权限。但文件上并没有这么说
我的问题是,如果我没有授予其他应用共享此URI的权限,为什么我能够共享此URI
我成功地与其他应用程序共享了该文件,但是,我在任何地方都不能通过调用Context.grantUriPermission或通过intent标志来授予此URI的读写权限
谷歌增加了一个逻辑,在某些情况下,它会自动授予FLAG\u GRANT\u READ\u URI\u权限
,我认为这是一个向后兼容的举动。我仍然引导开发人员手动添加标志,以防将来的Android版本恢复此更改(或设备制造商恢复),但从技术上讲,这不是必需的