Android 内容提供商授予uri权限
我搜索并阅读了android开发者的文件,但并没有找到内容提供商授予uri权限的满意答案。谁能解释得更详细、更简单些。我的问题是: 授权uri用于什么? 授予uri权限true和false之间有什么区别 我们什么时候应该使用true?什么时候错了? 欢迎提供更多细节 授权uri用于什么 “授予Android 内容提供商授予uri权限,android,permissions,uri,provider,grant,Android,Permissions,Uri,Provider,Grant,我搜索并阅读了android开发者的文件,但并没有找到内容提供商授予uri权限的满意答案。谁能解释得更详细、更简单些。我的问题是: 授权uri用于什么? 授予uri权限true和false之间有什么区别 我们什么时候应该使用true?什么时候错了? 欢迎提供更多细节 授权uri用于什么 “授予Uripermissions”功能允许您拥有通常第三方无法访问的ContentProvider,但有选择地允许在短时间内(例如,足够长的时间以查看提供商提供的PDF)访问单个Uri值 授予uri权限true
Uri
permissions”功能允许您拥有通常第三方无法访问的ContentProvider
,但有选择地允许在短时间内(例如,足够长的时间以查看提供商提供的PDF)访问单个Uri
值
授予uri权限true和false之间有什么区别
android:grantUriPermissions=“true”
表示您的Java代码可以对该内容提供者提供的任何URI
使用标记授予读取URI权限
和标记授予写入URI权限
android:grantUriPermissions=“false”
表示只有子
元素指定的Uri
值可以与FLAG\u GRANT\u READ\u Uri\u PERMISSION
一起使用,而FLAG\u GRANT\u WRITE\u Uri\u PERMISSION
表示需要发送应用程序缓存目录中的某个文件
没有其他应用程序可以访问该文件,除非您指定其他应用程序可以访问您的应用程序的内容。为此,您需要创建内容提供者,并以表单的形式创建所有uricontent://com.your.app/file 您可以“重定向”到应用程序缓存目录
一些代码:
File f = ...; // Some local file.
Uri uri = Uri.parse("content://com.your.app/" + f.getName());
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "Subject");
intent.putExtra(Intent.EXTRA_TEXT, "Body");
intent.putExtra(Intent.EXTRA_STREAM, uri);
// You only can add flag FLAG_GRANT_READ_URI_PERMISSION if your app has
// android:grantUriPermissions="true" in manifest or see quote below.
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(Intent.createChooser(intent, "Send Email"));
正如Commonware所说:
android:grantUriPermissions=“false”表示只有Uri值
由子元素指定的可以与一起使用
标记授予读取URI权限和标记授予写入URI权限
带有适配器类且在Kotlin中:-
val-uri:uri?=FileProvider.getUriForFile(mContext,BuildConfig.APPLICATION\u ID,文件)
val sharingcontent=Intent(Intent.ACTION\u发送)
sharingcontent.type=“image/*”
共享内容putExtra(Intent.EXTRA_主题,“图像”)
sharingcontent.putExtra(Intent.EXTRA\u流,uri)
val chooser=Intent.createChooser(共享内容,“共享文件”)
val resinfo-List:List=mContext.packageManager
.QueryInputActivities(仅适用于选择器、PackageManager.MATCH_默认值)
用于(ResInfo列表中的resolveInfo){
val packageName=resolveInfo.activityInfo.packageName
mContext.grantUriPermission(
包装名称,
乌里,
Intent.FLAG\授予\写入\ URI\权限或Intent.FLAG\授予\读取\ URI\权限
)
}
mContext.startActivity(选择器)
我仍然站在同一点上,不明白为什么要使用grant uri,而我们应该使用它。你能像一个初级开发人员那样更详细地解释并告诉我吗。@Android@Commonware的意思是,如果Android:grantUriPermissions
设置为false,Android系统将检查清单是否有
标记和特定路径名,应该允许使用URI权限,如
with adapter class and In Kotlin :-
val uri: Uri? = FileProvider.getUriForFile(mContext, BuildConfig.APPLICATION_ID, file)
val sharingIntent = Intent(Intent.ACTION_SEND)
sharingIntent.type = "image/*"
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, "Images ")
sharingIntent.putExtra(Intent.EXTRA_STREAM, uri)
val chooser = Intent.createChooser(sharingIntent, "Share File")
val resInfoList: List<ResolveInfo> = mContext.packageManager
.queryIntentActivities(chooser, PackageManager.MATCH_DEFAULT_ONLY)
for (resolveInfo in resInfoList) {
val packageName = resolveInfo.activityInfo.packageName
mContext.grantUriPermission(
packageName,
uri,
Intent.FLAG_GRANT_WRITE_URI_PERMISSION or Intent.FLAG_GRANT_READ_URI_PERMISSION
)
}
mContext.startActivity(chooser)