java - 图像内容提供商是否有“库存”选择器?
问题描述
例如,当我想在股票消息应用程序中将图像附加到文本消息时,我会看到一个熟悉的系统对话框,其中显示了相机、图库和其他图像内容提供程序。
我想在我自己的应用程序中使用它。我看到很多库允许用户在画廊和相机之间进行选择,但我想要所有用户安装的图像源都出现。
Messages(以及其他常用应用程序,例如 Mail)中的系统对话框真的是为这些应用程序定制的吗?我们真的需要自己建造吗?存储访问框架似乎不是正确的解决方案,因为它绕过了相机(或我没有想到但可能存在于用户设备上的其他图像源)。
解决方案
您要求的事情可以使用系统访问框架工作来完成。在清单文件中添加存储权限,然后检查权限是否被接受。然后您可以打开打开的文档选择让用户选择图像。
代码
在一些onClick里面
Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivityForResult(i, 41);
这将只为图像文件打开文件选择器活动。
然后你可以在里面取回结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK){
if (requestCode == 41) {
if (data != null) {
Uri uri = data.getData();
//This is the uri to the file
//To get the file use the uri
}
}
}
}
您仍然必须自己创建 BottomSheetDialog,但您的工作将大大减少,因为只有 2 个选项:1. 相机应用程序,2。文件选择器。您必须自己处理相机事件并获取图像 uri。
推荐阅读
- c# - 试图找到第 10001 个素数,c#
- c# - 'Ref' 和 'Out' 参数的内存分配,有什么区别吗?
- mysql - Why type data "long blob" in mysql read as "int8" in data explorer MATLAB?
- javascript - Gatsby v2 项目中的缓存问题
- ibm-cloud - 在没有 procfile 的 IBM Bluemix 上部署非 Web 应用程序 (python)?
- android - Ctrl + C vs Ctrl + Z for pausing repo sync?
- r - 使用公式(而不是函数)指定 map2() 的选项
- java - 在云环境中,使用哪些技术让客户端上传要处理的文件的好方法是什么?
- mysql - 插入选择语句
- javascript - 错误类型错误:无法在 Angular 6 中读取 null 的属性“推送”