Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自动授予的Uri权限_Android_Android Contentprovider - Fatal编程技术网

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版本恢复此更改(或设备制造商恢复),但从技术上讲,这不是必需的